Стратегия разбиения в Паркет и Искра - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть работа, которая читает CSV-файлы, конвертирует их во фреймы данных и записывает в Parquet. Я использую режим добавления при записи данных в паркет. При таком подходе при каждой записи создается отдельный файл Parquet. Мои вопросы:

  • 1) Если каждый раз, когда я записываю данные в схему Parquet, появляется новый файл будет ли это влиять на производительность чтения (как сейчас данные распространяются с разной длиной разделенных файлов Parquet)
  • 2) Есть ли способ генерировать паркетные перегородки исключительно на основе размер данных?
  • 3) Нужно ли придумывать собственную стратегию разбиения для реализации точка 2? Я использую Spark 2.3

1 Ответ

0 голосов
/ 12 сентября 2018
  1. Это повлияет на производительность чтения, если spark.sql.parquet.mergeSchema = true .

    В этом случае Spark необходимо посетить каждый файл и получить схемуИсходя из этого.

    В других случаях, я считаю, это не сильно влияет на производительность чтения.

  2. Невозможно сгенерировать чисто размер данных.Вы можете использовать repartition или coalesce.Позднее будут создаваться неравные выходные файлы, но они будут производительными.

    Кроме того, у вас есть конфигурация spark.sql.files.maxRecordsPerFile или опция maxRecordsPerFile, чтобы предотвратить большой размер файлов, но обычно это не проблема.

  3. Да, я думаю, что Spark не имеет встроенного API для равномерного распределения по размеру данных. Статистика столбцов и Оценщик размера может помочь в этом.

...