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