1. ホーム
  2. apache-spark

[解決済み] SparkでcreateOrReplaceTempViewはどのように動作するのですか?

2022-02-01 15:10:37

質問

私はSparkとSpark SQLの初心者です。

どのように createOrReplaceTempView はSparkで動作しますか?

を登録すると RDD のオブジェクトをテーブルとして使用する場合、spark はすべてのデータをメモリ内に保持するのでしょうか?

どのように解決するのですか?

createOrReplaceTempView は、Spark SQL のハイブテーブルのように使用できる、遅延評価の "view" を作成します (そのビュー名が既に存在する場合は置き換えます)。これは ない をキャッシュしない限り、メモリに永続化されます。

scala> val s = Seq(1,2,3).toDF("num")
s: org.apache.spark.sql.DataFrame = [num: int]

scala> s.createOrReplaceTempView("nums")

scala> spark.table("nums")
res22: org.apache.spark.sql.DataFrame = [num: int]

scala> spark.table("nums").cache
res23: org.apache.spark.sql.Dataset[org.apache.spark.sql.Row] = [num: int]

scala> spark.table("nums").count
res24: Long = 3

の後にのみ、データが完全にキャッシュされます。 .count を呼び出します。これがキャッシュされた証拠です。

関連するSO: createOrReplaceTempViewとcreateGlobalTempViewを比較する。

関連引用(永続テーブルとの比較): "createOrReplaceTempViewコマンドとは異なり、saveAsTableはDataFrameの内容を実体化し、Hiveメタストアにデータへのポインタを作成します."から。 https://spark.apache.org/docs/latest/sql-programming-guide.html#saving-to-persistent-tables

注意事項 : createOrReplaceTempView 以前は registerTempTable