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()
输出:
注:
- table 的大小以 KB 为单位(测试数据)
- 连接列'serial_id'不是分区列
- 使用胶水目录作为 Metastore (AWS)
- Spark 版本 - Spark 2.4.4
- 我也尝试了 BROADCASTJOIN 和 MAPJOIN 提示
- 当我尝试使用
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()
我正在尝试向尺寸较小的 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()
输出:
注:
- table 的大小以 KB 为单位(测试数据)
- 连接列'serial_id'不是分区列
- 使用胶水目录作为 Metastore (AWS)
- Spark 版本 - Spark 2.4.4
- 我也尝试了 BROADCASTJOIN 和 MAPJOIN 提示
- 当我尝试使用
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()