2015-09-15 2 views
5

Мне не удалось найти много информации по этой теме, но, скажем, мы используем dataframe для чтения в паркетном файле, который составляет 10 блоков, естественно создаст 10 разделов. Но когда блок данных читает в файле, чтобы обрабатывать его, не будет ли он обрабатывать большие данные для соотношения разделов, потому что если бы он обрабатывал файл без сжатия, размер блока был бы намного больше, что также увеличивало бы разделы.Spark DataFrames with Parquet and Partitioning

Так что позвольте мне уточнить, сжатый паркет (эти цифры не полностью точны). 1GB Par = 5 Блоки = 5 разделов, которые могут быть декомпрессированы до 5 ГБ, что делает его 25 блоков/25 разделов. Но если вы не переделаете 1GB-файл, вы будете застрять всего на 5 разделов, если оптимально это будет 25 разделов? Или моя логика ошибается.

Имеет смысл перераспределение для увеличения скорости? Или я думаю об этом неправильно. Может кто-нибудь пролить некоторый свет на это?

Предположения:

  • 1 Блок = 1 Раздел искру
  • 1 Ядро работает на 1 Partition
+0

«обрабатывать намного больше информации» по сравнению с чем? –

+1

Что я имею в виду, так это то, что мы читаем файл паркета с 10 слотами, но когда он несжатый, вы все еще используете 10 разделов в Spark. Должен ли вы перераспределить, потому что несжатый файл, естественно, больше? – theMadKing

+0

добавлены дополнительные разъяснения – theMadKing

ответ

4

Спарк DataFrame не загружает паркетным файлы в памяти. Он использует Hadoop/HDFS API для чтения его во время каждой операции. Таким образом, оптимальное количество разделов зависит от размера блока HDFS (отличается от размера блока Паркета!).

Спарк 1.5 DataFrame перегородки паркет файл следующим образом:

  • 1 раздела за HDFS блока
  • Если размер HDFS блока меньше, чем настроены по размеру Спарк паркета блока раздел будет создан для нескольких блоков HDFS таких так как общий размер перегородки не меньше размера паркетного блока
0

Я увидел другой ответ, но я подумал, что могу уточнить это. Если вы читаете Parquet из файловой системы posix, вы можете увеличить количество показаний секционирования, просто имея больше рабочих в Spark.

Но для того, чтобы контролировать баланс данных, поступающих в рабочих, можно использовать иерархическую структуру данных файлов Parquet, а позже в рабочих можно указать разные разделы или части файла Parquet. Это даст вам контроль над тем, сколько данных должно быть направлено каждому работнику в соответствии с доменом вашего набора данных (если путем балансировки данных у работников вы подразумеваете равную партию данных на одного работника, неэффективно).

Смежные вопросы