apache-spark - 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。
谢谢!
解决方案
您可以使用命令行 --conf spark.driver.maxResultSize=4g 来增加最大结果大小。
推荐阅读
- javascript - Firestore 查询文档的字段 ID
- jquery - jQuery Promise 函数链接
- python - 运行代码时输出面板中没有输出 - VSCode 上的 Python
- java - 从使用 Retrofit 2 for java Android 的方法返回字符串
- firebase - 从非谷歌服务器访问firestore?(我只是上传服务帐户 json 吗?)
- json - 如何在scrapy中从json中删除转义字符?
- c++ - 使用来自 contrib 库的 OpenCv c++ tracking api
- python - 有人可以解释如何为聊天记录实现换行处理程序修复吗?
- plot - Julia notebook 中的绘图和打印文本之间的冲突
- python-3.x - python预提交和pylint