理解 Apache Spark 连接类型

主要观点:本文讨论 Apache Spark 的三种基本连接,包括 Broadcast Hash Join(BHJ)、Sort Merge Join(SMJ)和 Shuffled Hash Join(SHJ),并介绍了它们的工作原理、适用场景及相关配置。
关键信息:

  • 数据帧连接操作常用于 Apache Spark 中的数据转换,内部 API 提供多种连接算法并选择其一,不了解核心算法可能导致连接操作成本高。
  • Spark 根据数据帧大小选择连接算法,主要的连接类型有 Sort Merge Join 和 Shuffle Hash Join,当一个数据帧大小小于阈值时 Broadcast Hash Join 很重要。
  • Broadcast Hash Join 中较小的数据帧广播到其他节点,可避免 shuffle 提高速度,但可能导致超时问题。
  • Sort Merge Join 适用于不能广播的数据帧,通过排序和洗牌在节点间通信,默认是合并排序连接算法。
  • Shuffled Hash Join 基于 map-reduce 概念,根据连接列值进行洗牌和连接,默认 preferSortMergeJoin 为 true,但设置为 false 时会选择此连接。
    重要细节:
  • Spark SQL 的 spark.sql.autoBroadcastJoinThreshold 默认值为 10mb,可通过 spark.conf.set 更改,spark.sql.broadcastTimeout 默认值为 5 分钟可更改。
  • Sort Merge Join 需两边数据帧有正确分区和排序,避免昂贵的洗牌和排序操作可提高连接执行效率。
  • Shuffled Hash Join 也需正确分区,不需要排序但可能比 Sort Merge Join 快,且会在连接的两边引入洗牌。
    结论:Apache Spark 内部会选择最佳连接算法,开发者可通过提示让 Spark 执行相应连接,但要注意可能导致的内存问题,不指定提示可能错过优化连接操作的机会。
阅读 191
0 条评论