如果我们缓存DataSet然后将相同的DataSet缓存为表,Spark会将数据缓存两次

时间:2018-04-23 06:29:07

标签: java apache-spark rdd apache-spark-dataset

DataSet<Row> dataSet = sqlContext.sql("some query");
dataSet.registerTempTable("temp_table");
dataset.cache(); // cache 1
sqlContext.cacheTable("temp_table"); // cache 2

所以,在这里,我的问题是只会对dataSet进行一次缓存,或者会有两个相同dataSet的副本,一个作为dataSet(缓存1),另一个作为表(缓存2)

1 个答案:

答案 0 :(得分:1)

它不会,或者至少它不会在任何最新版本中获胜:

scala> val df = spark.range(1)
df: org.apache.spark.sql.Dataset[Long] = [id: bigint]

scala> df.cache
res0: df.type = [id: bigint]

scala> df.createOrReplaceTempView("df")

scala> spark.catalog.cacheTable("df")
2018-01-23 12:33:48 WARN  CacheManager:66 - Asked to cache already cached data.