#apache-spark #apache-spark-sql
#apache-spark #apache-spark-sql
Вопрос:
Я читал на нескольких форумах, что перемешивание уменьшается при выполнении объединения слиянием сортировки, когда ваши базовые таблицы объединены и отсортированы. Однако мой вопрос заключается в следующем
Отсортированная корзина гарантирует только то, что данные в корзине имеют примерно одинаковый набор ключей и данные отсортированы. Предположим, у нас есть 2 фрейма данных d1 и d2, оба отсортированы и объединены в группы.
- Гарантирует ли spark, что bucketx таблицы d1, содержащей данные key1 и key2, находится на том же компьютере, что и buckety таблицы d2, содержащей key1 и key2?
Если bucketx и buckety гарантированно находятся на одном компьютере, то при выполнении соединения сортировки-слияния обмен между узлами не будет. если они могут располагаться на разных машинах. тогда при выполнении объединения должен быть обмен данными.
Пожалуйста, помогите понять эту концепцию. Заранее спасибо.
Ответ №1:
Ваше понимание правильное. SortMergeJoin
требуется RangePartitioning
данных.
Если ваши фреймы данных df1 и df2 уже разделены с помощью RangePartitioner
ключа on k
(который также используется в join), то дополнительного обмена не будет, в противном случае он будет.
Комментарии:
1. как это гарантирует, что объединяемые сегменты находятся на одном компьютере. если фреймы данных разделены разделами диапазона по клавише k. это не гарантирует, что оба раздела находятся на одном компьютере. это только гарантирует, что в сегментах есть одинаковые ключи
2. Один и тот же сегмент диапазона используется на одном разделе (компьютере).
3. вы уверены в этом .. Я прошел по этой ссылке, и похоже, что хэш-разделение используется для объединения сортировки слиянием. github.com/apache/spark/pull/21156/files /…