broadcastjoin提示在pyspark sql中不起作用

falq053o  于 2021-05-29  发布在  Spark
关注(0)|答案(1)|浏览(529)

我试图提供广播提示表,这是较小的大小,但物理计划仍然显示我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胶水目录作为我的元存储?

vmjh9lq9

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()

相关问题