如果我的数据未分区,这就是我的 PySpark 作业出现 maxResultSize 错误的原因吗?

问题描述 投票:0回答:1

我的公司有一个正在生产中的 PySpark 作业,每天都在运行,但最近失败了,而自 1 月份首次部署该作业以来,它每天都成功。

错误与 maxResultSize 相关,如下所述:https://kb.databricks.com/jobs/job-fails-maxresultsize-exception#:~:text=This%20error%20occurrs%20because%20the,the%20driver %20本地%20文件%20系统.

我将此属性的配置从默认的 1g 增加到了 2g,现在可以正常工作了。但我认为这只是暂时的解决办法。

在调试时,我注意到当我检查作业时,执行器上的任务数量每天都在不断增加,即使没有任何变化(输入数据量和输出数据量稳定)。元数据没有改变,我没有看到任何最近的数据被拉入任何不良数据。

我唯一能想到的是输入数据没有分区;事实上,每天都会添加新数据,目前 Hadoop 中的数据大小约为 4.5GB。我的工作只需要最近一天的数据,并且我有一个过滤器来获取它。

这可能是更深层次的根本原因吗?

sql hadoop pyspark
1个回答
0
投票

出现此错误的原因是Executors的任务输出结果的总大小,在输出到Driver时,超出了spark.driver.maxResultSize的限制。

处理建议:

在Executors的任务中打印最终发送到Driver程序的数据量,看看每天的数据量是否在不断增加。 优化任务处理逻辑,看看是否可以提前过滤、聚合等更多的数据,从而减少返回给Driver程序的数据量。 对数据进行分区,然后分别处理这些分区,而不是一次处理所有数据。

© www.soinside.com 2019 - 2024. All rights reserved.