перераспределение искры неравномерно, все еще перекошено - PullRequest
0 голосов
/ 16 сентября 2018

Как я могу форсировать (в основном) равномерное распределение?

Я хочу выполнить что-то вроде:

df.repartition(5000) // scatter
.transform(some_complex_function)
.repartition(200) // gather
.write.parquet("myresult")

Действительно, после шага перераспределения выполняется 5000 задач.Тем не менее, размер входных файлов на задачу варьируется от менее 1 МБ до 16 МБ.

Данные по-прежнему искажены.Как я могу убедиться, что он больше не перекошен и ресурсы кластера используются эффективно.

edit

Я узнал, что это связано с использованием столбцов сложного типа, то есть массивов.Также обратите внимание, что some_complex_function работает с этим столбцом, т. Е. Его сложность увеличивается с увеличением количества элементов в массиве.

Есть ли способ лучше разделить для такого случая?

1 Ответ

0 голосов
/ 16 сентября 2018

repartition должно распределять количество записей равномерно, вы можете убедиться, что с помощью методов, перечисленных здесь: Apache Spark: получить количество записей на раздел

Если ваша запись содержит некоторые сложные структуры данных или строки различной длины, то число байтов на раздел не будет равным. Я попросил решение этой проблемы здесь: Как (в равной степени) разделить данные массива в искровом фрейме данных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...