Spark - Эффективное разделение ключей, можете ли вы объединить методы разделения? - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть паркетный файл в HDFS, размером около 1 ТБ. В настоящее время данные разбиты методом по умолчанию (не уверен, что это такое - раньше я думал, что это хеш-разделы), но на следующем шаге необходимо объединить строки друг с другом, используя столбец «guid», поэтому я ищу оптимальную реализацию разбиения , Мое текущее определение неэффективности состоит в том, что существует существенное перетасовывание набора данных для упомянутого объединения, и в каталоге паркетных файлов есть около 79 КБ для 1 ТБ, около 13 МБ на раздел. Повторное использование может быть простым начальным выигрышем (я унаследовал этот набор данных - не настроил его), но я думаю, что некоторая форма раздела guid будет лучше, учитывая мои текущие знания о том, как работает разбиение

Мое понимание того, что делает хороший раздел:

  • Данные должны быть разбиты на ключ столбца, который будет использоваться для дальнейшей агрегации для минимизации перемешивания
  • Размер раздела должен составлять около 128 МБ, так как его часто считают «сладким пятном».

Данные представляют собой временные ряды, поэтому неплохо начать с разбивки по дате, но мне нужно разбить ее на части для последующих операций (с использованием guid). Я думал о разделении по дате, а также о RangePartitioner в guid.

Мои вопросы:

  1. Это вообще возможно? Я сейчас настраиваю rangePartition, но я не вижу в сети ни одного случая объединения partitionByKey столбца и rangePartitioner?
  2. Направляющие не образуют четного раздела. У некоторых будет больше строк, чем у других. Я надеюсь, что rangePartitioner поможет в этом, но нет никаких гарантий. Есть ли что-нибудь, что будет динамически распределяться по ключу, чтобы сбалансировать размеры раздела как можно лучше? Я стремлюсь к 128 МБ на раздел, поэтому придется использовать некоторые эвристики / оценки, чтобы максимально приблизиться на данный момент.
  3. Наконец - если / когда я добавлю больше данных в файл с разделами, будут ли эти данные следовать той же методике разделения?

Пример таблицы:

//============[]======[]===========[]====================\\
||    Date    || Guid || SubGuidID || Misc Other columns ||
|]============[]======[]===========[]====================[|
|| 2018-04-30 ||    1 ||         1 || x                  ||
|| 2018-04-30 ||    1 ||         2 || y                  ||
|| 2018-04-30 ||    2 ||         1 || z                  ||
\\============[]======[]===========[]====================//
...