Apache spark Spark wholeTextFiles():java.lang.OutOfMemoryError:java堆空间

Apache spark Spark wholeTextFiles():java.lang.OutOfMemoryError:java堆空间,apache-spark,jvm,out-of-memory,apache-spark-sql,Apache Spark,Jvm,Out Of Memory,Apache Spark Sql,我正在使用spark.wholeTextFiles()处理一个400MB的文件,并且我一直出现内存不足错误。我第一次使用这个API时,文件夹中的文件总共有40MB,我想知道我的代码是否可以处理大文件,这就是大文件的来源 这就是配置,我想我为堆提供了足够的RAM,但仍然没有运气,我只是在阅读文件夹,然后用 files.saveAsTextFile("data/output/no") 命令是 spark提交--驱动程序内存4G--驱动程序java选项-Xms4096m --执行器内存4G目标/sc

我正在使用
spark.wholeTextFiles()
处理一个400MB的文件,并且我一直出现内存不足错误。我第一次使用这个API时,文件夹中的文件总共有40MB,我想知道我的代码是否可以处理大文件,这就是大文件的来源

这就是配置,我想我为堆提供了足够的RAM,但仍然没有运气,我只是在阅读文件夹,然后用

files.saveAsTextFile("data/output/no")
命令是

spark提交--驱动程序内存4G--驱动程序java选项-Xms4096m --执行器内存4G目标/scala-2.11/mz_2.11-1.0.jar

我比较了spark sql、
sc.hadoopFile
sc.wholeTextFiles
wholeTextFiles是最快的,我认为这是因为
wholeTextFiles
试图将整个文件夹加载到一个节点的内存中,我猜是主节点,所有事情都发生在RAM上,所以速度很快

HadoopFile()按分区加载,分区数与文件数相同,即使文件很小,而且读取操作很昂贵

spark sql将文件夹加载到分区,分区大小可以用

spark.conf.set("spark.sql.files.maxPartitionBytes", 32000000)
但是,如果文件很小,则需要时间将文件收费到每个分区

问题1。为什么我总是出现内存不足的错误

问题2。spark按分区加载文件夹/大文件并返回RDD时,如何 许多分区已被读入RAM?也许不是,等等 对于操作,加载的分区数量与 执行者(或核心?)每次治疗?那样的话,也许我们应该 加载64MB或128MB这样的大分区,而不是像 32kb


你能把整个密码都记下来吗

当需要
filePath和fileContent时,使用
wholeTextFile()
。 类似于键->文件路径(C:\\fileName)和值->实际文件内容

使用
wholeTextFile()
时的分区数取决于您有多少executor内核。 在这里,分区的数量将是1个或更多

除非一个动作被称为spark,否则不会触发作业。
这是一种自下而上的方法/惰性评估。

你能把整个代码都写下来吗

当需要
filePath和fileContent时,使用
wholeTextFile()
。 类似于键->文件路径(C:\\fileName)和值->实际文件内容

使用
wholeTextFile()
时的分区数取决于您有多少executor内核。 在这里,分区的数量将是1个或更多

除非一个动作被称为spark,否则不会触发作业。 这是一种自下而上的方法/惰性评估