Пара вещей, о которых вы спрашиваете - разбиение, группирование и балансировка данных,
разбиение:
- Данные разбиения часто используются дляРаспределение нагрузки по горизонтали дает выигрыш в производительности и помогает организовать данные логическим образом.
- Таблицы секционирования изменяют структуру постоянных данных и теперь будут создавать подкаталоги, отражающие эту структуру секционирования.
- Этоможет значительно повысить производительность запросов, но только если схема разделения отражает общую фильтрацию.
В Spark это выполняется с помощью df.write.partitionedBy(column*)
и группирует данные путем разделения columns
на один и тот же подкаталог.
Группирование:
- Группирование - это еще один метод разложения наборов данных на более управляемые части.На основе предоставленных столбцов все данные хэшируются в определенное пользователем количество сегментов (файлов).
- Синонимично Hive's
Distribute By
В Spark это делается с помощью df.write.bucketBy(n, column*)
и группирует данные, разбивая columns
на один файл.количество сгенерированных файлов контролируется с помощью n
Передача:
- Возвращает новое
DataFrame
, сбалансированное равномерно на основе заданных выражений разбиения в заданное числовнутренних файлов.Результирующий DataFrame разделен на хеш. - Spark управляет данными на этих разделах, что помогает распараллеливать распределенную обработку данных с минимальным сетевым трафиком для отправки данных между исполнителями.
В Spark это делаетсяна df.repartition(n, column*)
и группирует данные путем разбиения columns
на один и тот же файл внутреннего раздела.Обратите внимание, что данные не сохраняются в хранилище, это просто внутренняя балансировка данных на основе ограничений, подобных bucketBy
Tl; dr
1) Я использую перераспределение по столбцам для хранения данных в паркете.Но я вижу, что нет.паркетных файлов не совпадает сRDD разделов.Нет ли корреляции между разделами rdd и паркетными разделами?
- перераспределение имеет корреляцию с bucketBy, а не partitionedBy.Разделенные файлы управляются другими конфигами, такими как
spark.sql.shuffle.partitions
и spark.default.parallelism
2) Когда я записываю данные в паркетный раздел и использую переразметку Rdd, а затем читаю данные из паркетараздел, есть ли какое-либо условие, когда номера разделов rdd будут одинаковыми во время чтения / записи?
- во время чтения, количество разделов будет равно
spark.default.parallelism
3) Как отличается формирование пакета данных с помощью идентификатора столбца и перераспределение кадра данных через один и тот же идентификатор столбца?
- Работает аналогично, за исключением того, чтоОперация записи и используется для постоянства.
4) При рассмотрении производительности объединений в Spark следует рассмотреть вопрос о группировании или перераспределении (или, возможно, обоих)
repartition
обоих наборов данных находятся в памяти, если один или оба набора данных сохраняются, посмотрите также на bucketBy
.