В чем разница между разбиением и группированием в Spark? - PullRequest
0 голосов
/ 02 июля 2019

Я пытаюсь оптимизировать запрос на соединение между двумя искровыми фреймами данных, назовем их df1, df2 (объединение по общему столбцу «SaleId»). df1 очень маленький (5М), поэтому я транслирую его среди узлов искрового кластера. df2 очень большой (200 миллионов строк), поэтому я попытался разбить его на сегменты по "SaleId".

В Spark, в чем разница между разбиением данных по столбцам и группированием данных по столбцам?

например:

раздел:

df2 = df2.repartition(10, "SaleId")

Ковш:

df2.write.format('parquet').bucketBy(10, 'SaleId').mode("overwrite").saveAsTable('bucketed_table'))

После каждого из этих приемов я только что присоединился к df2 с df1.

Я не могу понять, какой из этих методов является правильным. Спасибо

1 Ответ

0 голосов
/ 02 июля 2019

передел предназначен для использования в качестве части действия в том же задании зажигания.

bucketBy для вывода, записи.И, таким образом, чтобы избежать перетасовки в следующем Spark App, как правило, как часть ETL.Подумайте о соединениях.См. https://databricks -prod-cloudfront.cloud.databricks.com / public / 4027ec902e239c93eaaa8714f173bcfc / 4861715144695760/2994977456373837/5701837197372837 / latest.html , который отлично читается.Таблицы bucketBy могут быть прочитаны только Spark, хотя в настоящее время.

...