Если вы можете вставить в файл ваши файлы перед присоединением, это, вероятно, лучше.В противном случае вам потребуется еще один шаг записи для использования группирования.
df_A.write.format('parquet')
... .bucketBy(10, 'name')
... .mode("overwrite")
... .saveAsTable('bucketed_table_A'))
df_B.write.format('parquet')
... .bucketBy(10, 'name')
... .mode("overwrite")
... .saveAsTable('bucketed_table_B'))
Bucketing позволяет предварительно перемешать данные.И dataframa_A, и datafram_B должны иметь одинаковое количество сегментов.Выбор номера ведра является сложным «искусством» и зависит от ваших данных и вашей конфигурации.
Затем вы читаете свои данные в пакетах и присоединяете их к «имени».
spark.table('bucketed_table_A').join(
spark.table('bucketed_table_B'),
on='name',
how='left'
)
Делая это, вы переводите время вычислений из шага соединения в шаг записи / вставки.Но сделайте это один раз, и тогда вы сможете использовать его много раз.