首页 文章

write.save上的Spark分区将所有数据带到驱动程序?

提问于
浏览
0

所以基本上我有一个python spark作业,读取一些简单的json文件,然后尝试将它们写为由一个字段分区的orc文件 . 分区不是很 balancer ,因为有些键非常大,而其他键非常小 .

做这样的事情我有记忆问题:

events.write.mode('append').partitionBy("type").save("s3n://mybucket/tofolder"), format="orc")

向执行程序添加内存似乎没有任何影响,但我解决了增加驱动程序内存的问题 . 这是否意味着所有数据都被发送给驱动程序以供其编写?每个执行者都不能写自己的分区吗?我使用Spark 2.0.1

1 回答

  • 0

    即使您对数据集进行分区,然后将其写入存储,也不可能将记录发送到驱动程序 . 您应该查看内存问题的日志(如果它们出现在驱动程序或执行程序上),以找出失败的确切原因 .

    可能是因为以前的计算,你的驱动程序内存太低而无法处理这个 write . 尝试减少 spark.ui.retainedJobsspark.ui.retainedStages 以节省旧作业和阶段元数据的内存 . 如果这没有帮助,请使用 jvisualvm 连接到驱动程序以查找作业/阶段,而不是使用大堆碎片并尝试进行优化 .

相关问题