Если вы используете интерфейс SQL, вы можете делать что-либо без использования интерфейса DF.
Cluster By
совпадает с:
df.repartition($"key", n).sortWithinPartitions()
Из-за ленивой оценки , Spark увидит JOIN и узнает, что вы указали, что хотите переразбить по ключу - через SQL, а не как в приведенном выше заявлении - так что это просто интерфейс, составляющий то же самое. Упрощает работу только в режиме SQL. Вы можете смешивать.
Если вы этого не сделаете, Spark сделает это за вас (в общем) и применит текущий параметр перемешивания разделов.
SET spark.sql.shuffle.partitions = 2
SELECT * FROM df CLUSTER BY key
совпадает с:
df.repartition($"key", 2).sortWithinPartitions()
spark.sql('''SELECT /*+ REPARTITION(col,..) */ cols... from table''')
ОБНОВЛЕНИЕ
Это не относится к СОЕДИНЕНИЮ таким образом:
val df = spark.sql(""" SELECT /*+ REPARTITION(30, c1) */ T1.c1, T1.c2, T2.c3
FROM T1, T2
WHERE T1.c1 = T2.c1
""")
Это приводит к повторному разделению после обработки ПРИСОЕДИНЯЙТЕСЬ. JOIN будет использовать большее из номеров секционирования, установленных на T1 и T2, или перемешивать разделы, если не задано явно.