为什么我在尝试读取大量的Avro文件时,在Spark驱动程序上出现内存不足错误?没有收集操作发生

gmxoilav  于 2022-11-16  发布在  Apache
关注(0)|答案(1)|浏览(127)

我试图在数据块上使用spark.read.load从s3的子目录中读取大量的Avro文件。我要么因为最大结果大小超过spark.driver.maxResultSize而得到错误,要么如果我增加该限制,驱动程序会耗尽内存。
我没有执行任何收集操作,所以我不知道为什么这么多的内存被用在驱动程序上。我想知道这是不是与过多的分区有关,所以我试着用不同的spark.sql.files.maxPartitionBytes值,但没有用。我还试着增加驱动程序上的内存,并使用更大的集群。
唯一似乎有点帮助的是事先指定Avro模式而不是推断;这意味着spark.read.load完成时没有出现错误,但是驱动程序上的内存使用率仍然非常高,如果我尝试对生成的DataFrame进行任何进一步的操作,驱动程序仍然会崩溃。

ggazkfy8

ggazkfy81#

我发现问题出在spark.sql.sources.parallelPartitionDiscovery.parallelism选项上。对于我试图读取的大量文件来说,这个选项设置得太低了,导致驱动程序崩溃。增加了这个选项的值,现在我的代码可以工作了。

相关问题