Krz*_*sik 4 scala dataset apache-spark rdd
假设我做这样的事情:
def readDataset: Dataset[Row] = ???
val ds1 = readDataset.cache();
val ds2 = ds1.withColumn("new", lit(1)).cache();
Run Code Online (Sandbox Code Playgroud)
将ds2和ds1共享列中除“新”之外的所有数据添加到ds2? 如果我缓存两个数据集,它是否会将整个数据集存储在内存中ds,ds2或者共享数据仅存储一次?
如果数据是共享的,那么当这个共享被破坏时(因此相同的数据存储在两个内存位置)?
我知道数据集和 rdds 是不可变的,但是如果共享数据,我找不到明确的答案。
简而言之:缓存的数据不会被共享。
使用 Spark UI 中的代码片段和相应的内存使用情况来说服您的实验证明:
val df = spark.range(10000000).cache()
val df2 = df.withColumn("other", col("id")*3)
df2.count()
Run Code Online (Sandbox Code Playgroud)
使用大约 10MB 的内存:
尽管
val df = spark.range(10000000).cache()
val df2 = df.withColumn("other", col("id")*3).cache()
df2.count()
Run Code Online (Sandbox Code Playgroud)
使用大约 30MB:
df:10MBdf2: 10MB 用于复制的列,另外 10MB 用于新列:| 归档时间: |
|
| 查看次数: |
58 次 |
| 最近记录: |