BROADCASTJOIN 提示在 PySpark SQL 中不起作用

Pra*_*arg 1 apache-spark apache-spark-sql pyspark aws-glue-data-catalog

我试图向尺寸较小的表提供广播提示,但物理计划仍然向我显示 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. 表的大小以 KB 为单位(测试数据)
  2. 连接列“serial_id”不是分区列
  3. 使用glue目录作为元存储(AWS)
  4. Spark版本-Spark 2.4.4
  5. 我也尝试过 BROADCASTJOIN 和 MAPJOIN 提示
  6. 当我尝试使用created_date[分区列] 而不是serial_id作为我的加入条件时,它向我显示广播加入 -

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 作为我的元存储时 Spark 行为很奇怪?

Shu*_*Shu 7

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()
Run Code Online (Sandbox Code Playgroud)