Как избежать перетасовки в SortMerge Join для секционированного столбца?

#apache-spark #apache-spark-sql

#apache-spark #apache-spark-sql

Вопрос:

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

Набор данных 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)); 
  

Dataset 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)); 
  

Объединение в region и StudentID приводит к перетасовке данных. Ниже приведен запрос на объединение :

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

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

Ответ №1:

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

Комментарии:

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

2. @Alpesh: PartitionKeys не могут быть частью группирования или сортировки столбцов.