Итак, я загружаю фрейм данных, ~ 5 миллионов строк, ~ 80 столбцов.
Один из столбцов, назовем его X, имеет ~ 17000 уникальных строковых значений с хорошим и равномерным распределением количества значений.(т.е. никакое значение X не является слишком частым).
Я хочу сгруппировать данные по X и выполнить некоторые агрегированные метрики для остальных столбцов.Поэтому я подумал, что было бы неплохо сначала перераспределить данные на X и кэшировать данные.
df.repartition(400, 'X')
df.cache().count()
Однако все кэшированные данные заканчиваются одним исполнителем , что очень не идеально для последующего анализа.
Интересно, что после удаления разделения на 'X':
df.repartition(400)
df.cache().count()
Данные красиво и равномерно распределены по всем узлам.
Вопросы:
- Почему кэшированные данные, разделенные на X, попадают на одного исполнителя?
- в целом, есть ли способ перераспределения кэшированных данныхсбалансированным образом среди всех узлов?
- Я имею в виду, в частности, ситуации, когда используется динамическое распределение - можно внезапно получить новые свежие узлы, которые, таким образом, не имеют данных, оставляя всю работу уже существующим узлам ...