Выберите N элементов из каждого раздела в искре - PullRequest
0 голосов
/ 14 октября 2019

Предполагая, что у меня есть RDD. Я устанавливаю количество разделов RDD равным 5. Я хочу выбрать 10 элементов из каждого раздела и хочу сохранить их в переменной с именем var1 , а позже я хочу транслировать var1 . Как я могу добиться этого?

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

Ответы [ 2 ]

0 голосов
/ 14 октября 2019

Применить функцию take (n) к каждому разделу RDD, которая создаст другую RDD с n * элементами noOfPartitions.

val var1 = rdd.mapPartitions(rows  => rows.take(10)).collect()

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

0 голосов
/ 14 октября 2019

вы можете попробовать получить номер раздела с помощью .mapPartitionsWithIndex, группировать по разделу с помощью .groupBy, добавить идентификатор с .zipWithIndex, затем отфильтровать до 10 записей для каждой группы с помощью .filter и, наконец, .collect.

...