2015-03-11 2 views
1

В настоящее время я работаю над проектом Spark в Java, и у меня возникла проблема, что я не знаю, как ее решить. Я не знаком с различными методами соединения/объединения, поэтому я считаю, что одним из них является ответ.Spark (Java): Получить пар файлов/содержимого из списка имен файлов

В настоящее время я хочу ввести список имен файлов (или путей) и получить объект JavaPairRDD, состоящий из пар имен файлов/путей и текстового содержимого.

Я знаю, что я могу использовать стандартную Java для получения текстового содержимого и просто вводить список кортежей с именами файлов, но я чувствую, что это должен быть способ «искры».

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

Кроме того, я знаю, что я могу распараллелить каждый файл отдельно в цикле, но как я могу объединить их вместе?

docs = //List<String> of document filenames 
JavaRDD<String> documents = sc.parallelize(docs); 
JavaPairRDD<String, String> = documents.??? 

Заранее спасибо.

Редактировать: У меня возникает соблазн создать JavaPairRDD <Filename, JavaRDD<String> filecontents>, но я не уверен, как исходить оттуда. Я также опасаюсь этого, потому что это звучит неправильно (т. Е. Я как-то переопределяю параллелизм?).

Я знаю, что у меня может быть Spark создать объект JavaRDD из каждого документа, преобразовать их в объекты списка, а затем прокормить их в виде кортежей, но есть ли специальный способ Spark?

Редактировать 2 По-видимому, я неправильно понял, как текстовые файлы загружаются в объект JavaRDD. Они не загружают всю строку в виде одного объекта, они разбиваются по строкам. Это заставляет меня переосмыслить мой подход, поскольку мне действительно нужны вещи, чтобы разбить линии по разным причинам. Поэтому я думаю, что мне нужно пойти с «хакерским» подходом к использованию искры, чтобы загрузить файл, а затем преобразовать его обратно в список. Тем не менее, я оставлю вопрос на случай, если у кого-то есть умное решение для этого.

ответ

0

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

А именно, я действительно не хочу, чтобы файлы были разбиты на строки, я хочу разбить его особым образом.

+0

Мне пришлось переключиться обратно, у целыхTextFiles() есть проблемы с Amazon S3. –

0

Если вы идете по методу wholeTestFiles(), не будет ли он сразу считывать целые данные, а затем распараллелить его над вашим автономным Spark cluster/workers? Код вашего драйвера должен работать в более высокой памяти.

Смежные вопросы