registerTempTable
(createOrReplaceTempView
とスパーク2. +)のテーブルがキャッシュされていますか?spark-sqlを使用した一時テーブルキャッシュ
Zeppelinを使用して、重い計算の後にDataFrame
を私のスカラーコードに登録し、次に%pyspark
にアクセスし、それをさらにフィルタリングしたいと思います。
メモリキャッシュ版を使用しますか?それとも毎回再建されるのだろうか?
registerTempTable
(createOrReplaceTempView
とスパーク2. +)のテーブルがキャッシュされていますか?spark-sqlを使用した一時テーブルキャッシュ
Zeppelinを使用して、重い計算の後にDataFrame
を私のスカラーコードに登録し、次に%pyspark
にアクセスし、それをさらにフィルタリングしたいと思います。
メモリキャッシュ版を使用しますか?それとも毎回再建されるのだろうか?
登録されたテーブルはキャッシュされません。
registerTempTable
createOrReplaceTempView
方法は、単に与えられたクエリプランで指定したDataFrame
のビューを作成したり、置き換えられます。
永続的なビューを作成する必要がある場合は、クエリプランを正規化されたSQL文字列に変換し、メタストアにビューテキストとして格納します。
DataFrameを明示的にキャッシュする必要があります。例えば:
df.createOrReplaceTempView("my_table") # df.registerTempTable("my_table") for spark <2.+
spark.cacheTable("my_table")
EDIT:
のは一例でこれを説明してみましょう:
cacheTable
使用:今すぐ
cache.registerTempTable
を使用して同じ例
を
scala> val df = Seq(("1",2),("b",3)).toDF
// df: org.apache.spark.sql.DataFrame = [_1: string, _2: int]
scala> sc.getPersistentRDDs
// res0: scala.collection.Map[Int,org.apache.spark.rdd.RDD[_]] = Map()
scala> df.createOrReplaceTempView("my_table")
scala> sc.getPersistentRDDs
// res2: scala.collection.Map[Int,org.apache.spark.rdd.RDD[_]] = Map()
scala> spark.cacheTable("my_table")
scala> sc.getPersistentRDDs
// res4: scala.collection.Map[Int,org.apache.spark.rdd.RDD[_]] = Map(2 -> In-memory table my_table MapPartitionsRDD[2] at cacheTable at <console>:26)
を
cache.createOrReplaceTempView
:
scala> sc.getPersistentRDDs
// res2: scala.collection.Map[Int,org.apache.spark.rdd.RDD[_]] = Map()
scala> val df = Seq(("1",2),("b",3)).toDF
// df: org.apache.spark.sql.DataFrame = [_1: string, _2: int]
scala> df.createOrReplaceTempView("my_table")
scala> sc.getPersistentRDDs
// res4: scala.collection.Map[Int,org.apache.spark.rdd.RDD[_]] = Map()
scala> df.cache.registerTempTable("my_table")
scala> sc.getPersistentRDDs
// res6: scala.collection.Map[Int,org.apache.spark.rdd.RDD[_]] =
// Map(2 -> ConvertToUnsafe
// +- LocalTableScan [_1#0,_2#1], [[1,2],[b,3]]
// MapPartitionsRDD[2] at cache at <console>:28)
これはありません。明示的にキャッシュする必要があります。
sqlContext.cacheTable("someTable")
のでdf.cache.registerTempTableは実際には役に立たないのですか? –