我试图提供广播提示表,这是较小的大小,但物理计划仍然显示我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()
输出:
注:
表的大小以kbs为单位(测试数据)
联接列“serial\u id”不是分区列
使用粘合目录作为元存储(aws)
spark版本-spark 2.4.4
我也尝试过broadcastjoin和mapjoin提示
当我试图使用 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()
输出-
为什么Spark行为是奇怪的与aws胶水目录作为我的元存储?
1条答案
按热度按时间vmjh9lq91#
在
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()