sqlapi中的重分区

bnl4lu3b  于 2021-05-29  发布在  Spark
关注(0)|答案(2)|浏览(384)

我们使用spark的sqlapi来执行查询 Hive 群集上的表。我怎样才能执行 REPARTITION 在sql api?中查询的列上?。请注意,我们不使用dataframeapi,而是使用sqlapi(例如 SELECT * from table WHERE col = 1 ).
我知道pysparksql在 Dataframe API .
但是,我想知道指定 REPARTITION (在特定列上)通过sql api(通过select语句)在sql查询中。
考虑以下查询:

select a.x, b.y
from a
JOIN b
on a.id = b.id

感谢您的帮助。
我们使用spark 2.4
谢谢

iqjalb3h

iqjalb3h1#

您可以提供提示以在sparksql中启用重分区

spark.sql('''SELECT /*+ REPARTITION(colname) */ col1,col2 from table''')
nxowjjhe

nxowjjhe2#

两者都可以使用,但使用%sql时,请使用手册中的:

DISTRIBUTE BY

基于一组表达式重新划分关系中的行。具有相同表达式值的行将散列到同一个辅助进程。不能将此与order by或cluster by一起使用。
一切都是一样的。i、 洗牌发生,也就是说,你不能消除它,只是替代接口。当然,只有“懒惰”的评估才有可能。

%sql
SELECT * FROM boxes DISTRIBUTE BY width  
SELECT * FROM boxes DISTRIBUTE BY width SORT BY width

这是%sql方法中根据其他答案提示的替代方法。

相关问题