У меня есть паркетный файл в HDFS, размером около 1 ТБ. В настоящее время данные разбиты методом по умолчанию (не уверен, что это такое - раньше я думал, что это хеш-разделы), но на следующем шаге необходимо объединить строки друг с другом, используя столбец «guid», поэтому я ищу оптимальную реализацию разбиения , Мое текущее определение неэффективности состоит в том, что существует существенное перетасовывание набора данных для упомянутого объединения, и в каталоге паркетных файлов есть около 79 КБ для 1 ТБ, около 13 МБ на раздел. Повторное использование может быть простым начальным выигрышем (я унаследовал этот набор данных - не настроил его), но я думаю, что некоторая форма раздела guid будет лучше, учитывая мои текущие знания о том, как работает разбиение
Мое понимание того, что делает хороший раздел:
- Данные должны быть разбиты на ключ столбца, который будет использоваться для дальнейшей агрегации для минимизации перемешивания
- Размер раздела должен составлять около 128 МБ, так как его часто считают «сладким пятном».
Данные представляют собой временные ряды, поэтому неплохо начать с разбивки по дате, но мне нужно разбить ее на части для последующих операций (с использованием guid). Я думал о разделении по дате, а также о RangePartitioner в guid.
Мои вопросы:
- Это вообще возможно? Я сейчас настраиваю rangePartition, но я не вижу в сети ни одного случая объединения partitionByKey столбца и rangePartitioner?
- Направляющие не образуют четного раздела. У некоторых будет больше строк, чем у других. Я надеюсь, что rangePartitioner поможет в этом, но нет никаких гарантий. Есть ли что-нибудь, что будет динамически распределяться по ключу, чтобы сбалансировать размеры раздела как можно лучше? Я стремлюсь к 128 МБ на раздел, поэтому придется использовать некоторые эвристики / оценки, чтобы максимально приблизиться на данный момент.
- Наконец - если / когда я добавлю больше данных в файл с разделами, будут ли эти данные следовать той же методике разделения?
Пример таблицы:
//============[]======[]===========[]====================\\
|| Date || Guid || SubGuidID || Misc Other columns ||
|]============[]======[]===========[]====================[|
|| 2018-04-30 || 1 || 1 || x ||
|| 2018-04-30 || 1 || 2 || y ||
|| 2018-04-30 || 2 || 1 || z ||
\\============[]======[]===========[]====================//