Spark DataFrame Перераспределение и Паркет Перегородка - PullRequest
0 голосов
/ 26 сентября 2018
  1. Я использую перераспределение по столбцам для хранения данных в паркете.Но я вижу, что нет.паркетные файлы не совпадают с нет.RDD разделов.Нет ли корреляции между разделами rdd и паркетными перегородками?

  2. Когда я записываю данные в паркетный раздел и использую перераспределение Rdd, а затем считываю данные из паркетного раздела, есть ли какое-либо условиекогда номера разделов rdd будут одинаковыми во время чтения / записи?

  3. Как различается формирование кадра данных с использованием идентификатора столбца и перераспределение кадра данных через один и тот же идентификатор столбца?

  4. При рассмотрении эффективности объединений в Spark следует рассмотреть вопрос о группировании или перераспределении (или, возможно, обоих)

1 Ответ

0 голосов
/ 26 сентября 2018

Пара вещей, о которых вы спрашиваете - разбиение, группирование и балансировка данных,

разбиение:

  1. Данные разбиения часто используются дляРаспределение нагрузки по горизонтали дает выигрыш в производительности и помогает организовать данные логическим образом.
  2. Таблицы секционирования изменяют структуру постоянных данных и теперь будут создавать подкаталоги, отражающие эту структуру секционирования.
  3. Этоможет значительно повысить производительность запросов, но только если схема разделения отражает общую фильтрацию.

В Spark это выполняется с помощью df.write.partitionedBy(column*) и группирует данные путем разделения columns на один и тот же подкаталог.

Группирование:

  1. Группирование - это еще один метод разложения наборов данных на более управляемые части.На основе предоставленных столбцов все данные хэшируются в определенное пользователем количество сегментов (файлов).
  2. Синонимично Hive's Distribute By

В Spark это делается с помощью df.write.bucketBy(n, column*) и группирует данные, разбивая columns на один файл.количество сгенерированных файлов контролируется с помощью n

Передача:

  1. Возвращает новое DataFrame, сбалансированное равномерно на основе заданных выражений разбиения в заданное числовнутренних файлов.Результирующий DataFrame разделен на хеш.
  2. 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.
...