Apache spark Spark如何在本地模式下处理内存?

Apache spark Spark如何在本地模式下处理内存?,apache-spark,Apache Spark,我试图了解Spark(2.1.1)如何在本地模式下处理内存 据我所知,当我用--驾驶员记忆3g启动spark shell时: 预留了300MB 使用60%(默认值为spark.memory.fraction) 其余部分在执行和存储之间共享—1.7GB 据推测,spark shell和spark UI也共享了其中的一些功能 看看正在运行的进程,我看到spark shell的java.exe进程在重新启动后使用了大约1GB的RAM 如果我随后使用以下命令读取900MB CSV文件: val数据:

我试图了解Spark(2.1.1)如何在本地模式下处理内存

据我所知,当我用
--驾驶员记忆3g
启动spark shell时:

  • 预留了300MB
  • 使用60%(默认值为
    spark.memory.fraction
    ) 其余部分在执行和存储之间共享—1.7GB
据推测,spark shell和spark UI也共享了其中的一些功能

看看正在运行的进程,我看到spark shell的java.exe进程在重新启动后使用了大约1GB的RAM

如果我随后使用以下命令读取900MB CSV文件:

val数据:DataFrame=spark.read.option(“header”,value=true).csv(“data.csv”)

然后反复调用
data.count
,我可以看到java.exe进程每次都在缓慢上升,直到它的RAM容量达到2GB左右

有几个问题:

  • 为什么它的上限是2GB?这个数字是可用的1.7GB+预留的300MB吗
  • 因为我没有缓存任何东西,所以内存中实际上是什么
  • 当它达到2GB上限时,对
    data.count的后续调用会发生什么?很明显,它在以前的通话中占用了更多的内存,那么为什么一旦达到上限就不需要更多的内存呢