我试图了解Spark(2.1.1)如何在本地模式下处理内存。
据我了解,当我使用--driver-memory 3g
启动spark-shell时:
spark.memory.fraction
)
其余的,在执行和存储之间共享 - 1.7GB 据推测,其中一些内容也与spark-shell和Spark UI共享。
查看正在运行的进程,我看到了一个新的启动后使用大约1GB RAM的spark-shell的java.exe进程。
如果我使用以下方法读取900MB CSV文件:
val data: DataFrame = spark.read.option("header", value = true).csv("data.csv")
然后反复调用data.count
,我可以看到java.exe进程每次都会爬升,直到大约2GB的内存为止。
几个问题:
data.count
会发生什么?它显然在之前的通话中占用了更多的内存,那么为什么一旦它达到上限就不需要更多?