java - 如果我们缓存一个DataSet,然后将同一个DataSet缓存为表,Spark会缓存数据两次吗

标签 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

所以,我的问题是 Spark 只会缓存数据集一次,还是同一数据集有两个副本,一个作为数据集(缓存 1),另一个作为表(缓存 2)

最佳答案

不会,或者至少在最近的版本中不会:

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.

关于java - 如果我们缓存一个DataSet,然后将同一个DataSet缓存为表,Spark会缓存数据两次吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49974684/

相关文章:

java - 同时生成多个RDD

java - 在 Hadoop 中以序列文件格式写入/读取键/值对。

Java:如何从 mysql 中的全文搜索中检索字符串

java - 使用java的字符串数组参数错误

java - Spark Streaming 之后立即进行 Spark RDD 过滤器

java - RDD 到 JavaRDD 转换的性能影响

java - 向用户数据添加方法

scala - 修改 Spark RDD foreach 中的集合

java - 使用 Spark 在 Kafka 上发布消息

hash - 如何为每行 rdd 生成哈希? (PYSPARK)