首页 > 解决方案 > Spark 2.2.1:连接条件中的 array_contains 导致“大于 spark.driver.maxResultSize”错误

问题描述

在 AWS Glue Spark 2.2.1 环境中部署对 Spark SQL 查询的一些更改后,我开始看到以下错误:

org.apache.spark.SparkException:作业因阶段故障而中止:164 个任务的序列化结果的总大小(1031.4 MB)大于 spark.driver.maxResultSize(1024.0 MB)

我尝试使用 set("spark.sql.autoBroadcastJoinThreshold", "-1") 禁用广播连接并增加导致其他错误的 maxResultSize 但问题一直存在,直到我替换了以下连接

X left outer join Y on array_contains(X.ids, Y.id)

val sqlDF = spark.sql("select * from X lateral view explode(ids) t as id")
sqlDF.createOrReplaceTempView("X_exploded")
...
X_exploded left outer join Y on X_exploded.id = Y.id

我正在使用 AWS Glue 管理环境并且无权访问查询计划。但是,我很好奇为什么加入 array_contains 会导致更多的数据被带到驱动程序而不是爆炸和使用精确匹配?

请注意,表 X 包含 350KB 的 json/gzip 格式的数据,表 Y 包含大约 50GB 的 json/zip。

谢谢!

标签: apache-sparkapache-spark-sqlaws-glue

解决方案


您可以使用命令行 --conf spark.driver.maxResultSize=4g 来增加最大结果大小。


推荐阅读