我在spark中使用以下命令创建了一个带扣的表:
df.write.bucketBy(200, "UserID").sortBy("UserID").saveAsTable("topn_bucket_test")
表大小:50 gb
然后我加入了另一张table(比如说t2,大小:70GB)(像以前一样扣起来),上面的table是开着的 UserId
列。我发现在执行计划表上 topn_bucket_test
在连接之前被排序(但不是洗牌),我希望它既不是洗牌,也不是在连接之前排序,因为它是扣起来的。原因是什么?以及如何删除的排序阶段 topn_bucket_test
?
1条答案
按热度按时间icnyk63a1#
就我而言,避免排序阶段是不可能的。当使用相同的
bucketBy
这两个表中的实际扣合不太可能相同。假设第一个表的userid范围为1到1000,第二个表的userid范围为1到2000。不同的userid可能会出现在200个bucket中,在这些bucket中可能会有多个不同的(而且没有排序!)用户ID。