Spark使用哪个内存部分来计算不会持久化的RDD

Wal*_*uni 6 shuffle apache-spark rdd

我是Spark的新手,我理解Spark将执行程序内存划分为以下几部分:

RDD存储: Spark使用.persist()或.cache()来存储持久化RDD,可以通过设置spark.storage.memoryFraction(默认值为0.6)来定义

随机和聚合缓冲区: Spark用于存储随机输出.它可以使用spark.shuffle.memoryFraction定义.如果shuffle输出超过这个分数,那么Spark会将数据溢出到磁盘(默认为0.2)

用户代码: Spark使用此分数执行任意用户代码(默认为0.2)

为简单起见,我没有提到存储和洗牌安全分数.

我的问题是,Spark使用哪个内存部分来计算和转换不会持久存在的RDD?例如:

lines = sc.textFile("i am a big file.txt")
count = lines.flatMap(lambda x: x.split(' ')).map(lambda x: (x, 1)).reduceByKey(add)
Run Code Online (Sandbox Code Playgroud)

这里Spark不会立即加载整个文件,并会对输入文件进行分区,并在一个阶段中对每个分区进行所有这些转换.但是,Spark将用于加载分区行的内存部分,计算flatMap()和map()?

谢谢

更新:
上面显示的代码只是实际应用程序的一个子集,count保存时saveAsTextFile将触发RDD计算.此外,我的问题是Spark的行为通用,而不是发布的示例

Wal*_*uni 0

这是我在 Spark 邮件列表中从 Andrew Or 那里得到的答案:

它将是 JVM 中剩下的任何内容。这不是由存储或随机播放等部分明确控制的。然而,计算通常不需要使用那么多空间。根据我的经验,洗牌期间的缓存或聚合几乎总是最消耗内存的。