缓存时,Spark DataFrames / Datasets是否共享数据?

假设我做这样的事情:

def readDataset: Dataset[Row] = ???

val ds1 = readDataset.cache();

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

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

如果数据是共享的,那么此共享被破坏了(因此相同的数据存储在两个内存位置)?

我知道数据集和rdds是不可变的,但是无论是否共享数据,我都找不到清晰的答案。

sgdtiancai 回答:缓存时,Spark DataFrames / Datasets是否共享数据?

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

具有可在Spark UI中找到的代码段和相应的内存使用量的实验证明,可以说服您:

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

使用大约10MB的内存:

enter image description here

同时

df

使用大约30MB:

  • df2:10MB
  • {{1}}:复制的列为10MB,新列为10MB:

enter image description here

本文链接:https://www.f2er.com/3101245.html

大家都在问