равномерно разделить RDD в искре - PullRequest
0 голосов
/ 25 августа 2018

У меня есть текстовый файл в HDFS, который содержит около 10 миллионов записей. Я пытаюсь прочитать файл сделать некоторые преобразования на этих данных. Я пытаюсь равномерно разбить данные на части, прежде чем приступить к их обработке. вот пример кода

var myRDD = sc.textFile("input file location")

myRDD = myRDD.repartition(10000)

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

Так что нагрузка высока только на одного исполнителя Я тоже пытался и получил тот же результат

myRDD.coalesce(10000, shuffle = true)

есть ли способ равномерно распределить записи по разделам.

Прилагается размер случайного чтения / количество записей для этого конкретного исполнителя у обведенного круга гораздо больше записей для обработки, чем у других

любая помощь приветствуется, спасибо.

1 Ответ

0 голосов
/ 25 августа 2018

Чтобы справиться с перекосом, вы можете перераспределить свои данные, используя метод распределения (или используя перераспределение, как вы использовали). Для выражения для разделения выберите то, что, как вы знаете, будет равномерно распределять данные.

Вы даже можете использовать первичный ключ DataFrame (RDD).

Даже такой подход не гарантирует равномерного распределения данных между разделами. Все зависит от хеша выражения , по которому мы распространяем. Spark: как можно равномерно распределить мои записи по всем разделам

Соль можно использовать, что предполагает добавление нового «поддельного» ключа и использование рядом с текущим ключом для лучшего распределения данных. ( вот ссылка на засолку )

...