【问题标题】:Do Spark DataFrames/Datasets share data when cached?Spark DataFrames/Datasets 在缓存时是否共享数据?
【发布时间】:2020-03-10 15:13:12
【问题描述】:

假设我做了这样的事情:

def readDataset: Dataset[Row] = ???

val ds1 = readDataset.cache();

val ds2 = ds1.withColumn("new", lit(1)).cache();

ds2ds1 是否会共享列中除了 “new” 添加到 ds2 的所有数据?如果我缓存两个数据集,它会将整个数据集 dsds2 存储在内存中,还是共享数据只存储一次?

如果数据是共享的,那么当这个共享被破坏(所以相同的数据存储在两个内存位置)?

我知道数据集和 rdds 是不可变的,但我找不到明确的答案是否共享数据。

【问题讨论】:

    标签: scala apache-spark dataset rdd


    【解决方案1】:

    简而言之:缓存的数据不会被共享

    让你信服的实验证明,代码 sn-p 和相应的内存使用情况可以在 Spark UI 中找到:

    val df = spark.range(10000000).cache()
    val df2 = df.withColumn("other", col("id")*3)
    df2.count()
    

    使用大约 10MB 的内存:

    同时

    val df = spark.range(10000000).cache()
    val df2 = df.withColumn("other", col("id")*3).cache()
    df2.count()
    

    使用大约 30MB:

    • 对于df:10MB
    • df2:10MB 用于复制的列,另外 10MB 用于新列:

    【讨论】:

      猜你喜欢
      • 2020-02-27
      • 2020-10-23
      • 1970-01-01
      • 2012-07-01
      • 1970-01-01
      • 2015-07-13
      • 1970-01-01
      • 2016-12-15
      • 2018-07-01
      相关资源
      最近更新 更多