BROADCASTJOIN 提示在 PySpark 中不起作用 SQL

BROADCASTJOIN hint is not working in PySpark SQL

我正在尝试向尺寸较小的 table 提供广播提示,但物理计划仍在向我显示 SortMergeJoin。

spark.sql('select /*+ BROADCAST(pratik_test_temp.crosswalk2016) */ * from pratik_test_staging.crosswalk2016 t join pratik_test_temp.crosswalk2016 c on t.serial_id = c.serial_id').explain()

输出:

注:

  1. table 的大小以 KB 为单位(测试数据)
  2. 连接列'serial_id'不是分区列
  3. 使用胶水目录作为 Metastore (AWS)
  4. Spark 版本 - Spark 2.4.4
  5. 我也尝试了 BROADCASTJOIN 和 MAPJOIN 提示
  6. 当我尝试使用 created_date [分区列] 而不是 serial_id 作为我的加入条件时,它显示 BroadCast Join -

spark.sql('select /*+ BROADCAST(pratik_test_temp.crosswalk2016) */ * from pratik_test_staging.crosswalk2016 t join pratik_test_temp.crosswalk2016 c on t.created_date = c.created_date').explain()

输出-

为什么 AWS Glue Catalog 作为我的 Metastore 时 spark 行为很奇怪?

BROADCAST 提示中,我们需要传递 alias name of the table(因为您的别名保存在sql声明)。

尝试使用 /*+ BROADCAST(c) */* 而不是 /*+ BROADCAST(pratik_test_temp.crosswalk2016) */ *


spark.sql('select /*+ BROADCAST(c) */ * from pratik_test_staging.crosswalk2016 t join pratik_test_temp.crosswalk2016 c on t.serial_id = c.serial_id').explain()