Принуждение (Py) Spark распределять разделы среди всех исполнителей сбалансированным образом - PullRequest
1 голос
/ 18 апреля 2019

Итак, я загружаю фрейм данных, ~ 5 миллионов строк, ~ 80 столбцов.

Один из столбцов, назовем его X, имеет ~ 17000 уникальных строковых значений с хорошим и равномерным распределением количества значений.(т.е. никакое значение X не является слишком частым).

Я хочу сгруппировать данные по X и выполнить некоторые агрегированные метрики для остальных столбцов.Поэтому я подумал, что было бы неплохо сначала перераспределить данные на X и кэшировать данные.

df.repartition(400, 'X')
df.cache().count()

Однако все кэшированные данные заканчиваются одним исполнителем , что очень не идеально для последующего анализа.

Интересно, что после удаления разделения на 'X':

df.repartition(400)
df.cache().count()

Данные красиво и равномерно распределены по всем узлам.

Вопросы:

  • Почему кэшированные данные, разделенные на X, попадают на одного исполнителя?
  • в целом, есть ли способ перераспределения кэшированных данныхсбалансированным образом среди всех узлов?
    • Я имею в виду, в частности, ситуации, когда используется динамическое распределение - можно внезапно получить новые свежие узлы, которые, таким образом, не имеют данных, оставляя всю работу уже существующим узлам ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...