Как избежать перемешивания в SortMerge Join на многораздельном столбце? - PullRequest
1 голос
/ 28 марта 2019

Мы получили два набора данных, которые были сохранены следующим образом:

Набор данных A:

datasetA.repartition(5, datasetA.col("region")) 
                .write().mode(saveMode) 
                .format("parquet") 
                .partitionBy("region") 
                .bucketBy(5,"studentId") 
                .sortBy("studentId") 
                .option("path", parquetFilesDirectory) 
                .saveAsTable( database.tableA)); 

Набор данных B:

datasetB.repartition(5, datasetB.col("region")) 
                .write().mode(saveMode) 
                .format("parquet") 
                .partitionBy("region") 
                .bucketBy(5,"studentId") 
                .sortBy("studentId") 
                .option("path", parquetFilesDirectory) 
                .saveAsTable( database.tableB)); 

Присоединение к региону и studentId вызывает данныеперетасовать.Ниже приведен запрос на соединение:

spark.sql("Select count(*)  from  database.tableA a, database.tableB b where a.studentId = b.studentId and a.region = b.region").show() 

В чем может быть причина случайного перемешивания, когда мы включаем ключ разделения, и как мы можем его смягчить?

1 Ответ

0 голосов
/ 28 марта 2019

Да, вы можете смягчить перемешивание, используя предварительную сортировку и групповые таблицы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...