广播合并超过阈值后返回内存错误

解决ApacheSparkimorySpark异常错误

写由sandeep.chandran

2022年5月23日

问题

尝试合并两个大表,从表二投取选定列和从表二投取所有列

尽管总尺寸超出定值spark.sql.autoBroadcastJoinThreshold,BroadcastHashJoinApachespark返回OutOfMemorySparkException报错

maxResultSize=1073741824spark.sql.autbroadcastJointhresworld=-1

因果

这是因为Spark大小估计器受限

如果估计数据Frames小于autoBroadcastJoinThreshold,spark可能使用BroadcastHashJoin执行合并如果可用节点没有足够资源适应播送DataFrame,你的工作因内存错误失效

求解

有三种不同方法来缓解这一问题

  • 使用分析表高山市AWS系统|休眠收集细节计算数据Frames
  • 缓存表AWS系统|休眠)你广播
    1. 运行解释性并发命令返回物理计划
      sql解释
                    
                     )
                    
    2. 复习物理规划广播合并返回BuildingLeft缓存左侧表广播合并返回BuildingRight系统缓存右侧表
  • Databricks运行时间7.0排序MegeJoin带合并提示启动
文章有帮助吗