Spark: сортировка RDD из нескольких файлов без использования сбора

Я «загрузил» N файлов из определенного каталога в один RDD

val data = sc.textFile("file:///myPath/*.txt")

Например, мои 2 файла содержат по 5 строк каждый.

Файл 1

A
B
C
D
E

Файл 2

F
G
H
I
J

Если я добавлю sortBy в свой код:

val sortedData = data.sortBy(x => x)

Я не получаю отсортированные данные, а просто случайный RDD:

J
B
C
E
A
D
G
F
H
I

Сбор мог бы помочь мне, но

1) это не идеально для больших RDD

2) вместо RDD он возвращает массив (который я должен повторно распараллелить)

заранее спасибо

FF


person Fabio Fantoni    schedule 13.04.2015    source источник
comment
Это должно работать так. Как вы проверяете результаты сортировки?   -  person maasg    schedule 13.04.2015
comment
Печать моего результата... sortedData.foreach(println)   -  person Fabio Fantoni    schedule 14.04.2015
comment
sortedData.foreach(println) ничего не напечатает!   -  person eliasah    schedule 14.04.2015


Ответы (1)


Вы можете использовать метод объединения, если у вас есть несколько rdd:

val rdd = rdd1.union(rdd2)

Это объединит оба rdd, а затем вы сможете отсортировать этот новый rdd.

Но в вашем случае вы можете прочитать все данные в один и тот же rdd, а затем отсортировать их.

РЕДАКТИРОВАТЬ:

Я создал 2 файла, содержащие файл1 и файл2, и сделал следующее:

введите здесь описание изображения

person eliasah    schedule 13.04.2015
comment
Спасибо, Элиас. А что, если бы у меня было N файлов? Могу ли я использовать одну команду, чтобы объединить их все сразу? - person Fabio Fantoni; 14.04.2015
comment
Я также нашел этот код sc.textFile(','.join(files)) , но я не могу получить его синтаксис - person Fabio Fantoni; 14.04.2015
comment
Если у вас есть N файлов. Вы можете использовать подстановочный знак для каждого примера в методе sc.textFile, чтобы прочитать их все в один RDD. - person eliasah; 14.04.2015
comment
Я уже загружаю N файлов одновременно с ‹‹‹ val data = sc.textFile(file:///myPath/*.txt) ››› ... Проблема в том, что сортировка на этом RDD не работает, если я загружаю их таким образом... Я хотел бы знать, есть ли более эффективный способ их загрузки без использования сбора, чтобы правильно их отсортировать - person Fabio Fantoni; 14.04.2015
comment
Вы не умеете сортировать RDD? это RDD [строка]? Каков размер данных? что значит не работает? - person eliasah; 14.04.2015
comment
Да, это RDD [String]... Только один из моих вопросов (одна буква на строку)... Я хотел бы распечатать вывод, отсортированный по алфавиту (A, B, C, ecc...), а не случайным образом. ... Я использую ‹‹‹ val sortedData = data.sortBy(x =› x) ›››, но, как вы можете видеть в вопросе, если я печатаю RDD (‹‹‹ sortedData.foreach(println) › ››) на выходе что-то вроде J,B,C,ecc... - person Fabio Fantoni; 14.04.2015
comment
он отлично работает со мной! как вы видите выходные данные? какая команда? - person eliasah; 14.04.2015
comment
Элиас, может быть, эта картинка поможет понять, что я получаю в результате... it.tinypic. com/r/332mcya/8 - person Fabio Fantoni; 14.04.2015
comment
абсолютно точно, спасибо... вы используете take(10), зная, что RDD содержит 10 элементов... но что, если вы точно не знаете, сколько элементов содержится в RDD? Я мог бы проигнорировать точное количество элементов и все же захотеть отсортировать RDD... но БОЛЕЕ ВАЖНО, Take возвращает массив, а не RDD (так же, как и сбор) - person Fabio Fantoni; 14.04.2015
comment
Я считаю, что это параллелизм pb с вводом-выводом, но если вы сохраните rdd, он будет фактически отсортирован. - person eliasah; 14.04.2015
comment
Кажется, что сохранение RDD в виде текстового файла не вызывает проблем. Во всяком случае, у меня никогда не было проблем с сортировкой с одним текстовым файлом, загруженным в RDD, напечатанным с помощью rdd.foreach.println... Сегодня я узнал, что должен обращать внимание при загрузке N файлов, а затем использовать rdd.foreach.println ... большое спасибо, aliasah! - person Fabio Fantoni; 14.04.2015
comment
@Panto, если это было вам полезно, подумайте о голосовании и принятии ответа. - person maasg; 15.04.2015
comment
Ответ принят... но пока не могу проголосовать... репутация на данный момент слишком низкая ;-) Не могу получить больше очков репутации XD - person Fabio Fantoni; 15.04.2015
comment
@maasg: вы правы ... только что принял ответ ;-) ... поскольку я новичок в stackoverflow, я все еще не понимаю систему голосования ... можно ли проголосовать и за ответ? - person Fabio Fantoni; 15.04.2015
comment
нужен повтор 15 :) ... Мне нужно проголосовать за мои вопросы, так как я просто спрашиваю, а не отвечаю: P - person Fabio Fantoni; 15.04.2015