В настоящее время я работаю над проектом Spark на Java и столкнулся с проблемой, которую не знаю, как решить. Я не знаком с различными методами объединения/объединения, поэтому думаю, что один из них и есть ответ.
В настоящее время я хочу ввести список имен файлов (или путей) и получить объект JavaPairRDD, состоящий из пар имен файлов/путей и текстового содержимого.
Я знаю, что могу использовать стандартную Java для получения текстового содержимого и просто ввести список кортежей с именами файлов, но я чувствую, что для этого должен быть способ "Spark".
Я также знаю, что существует метод fullTextFile, но он захватывает только все в каталоге, и я не уверен, что это будет тот формат, который я получу (например, я мог бы использовать 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 из каждого документа, преобразовать их в объекты List, а затем передать их в виде кортежей, но есть ли специальный способ Spark для этого?
Редактировать 2 Очевидно, я неправильно понял, как текстовые файлы загружаются в объект JavaRDD. Они не загружают всю строку как один объект, они разбивают ее по строкам. Это заставляет меня переосмыслить свой подход, так как по разным причинам мне нужны вещи, которые выходят за рамки. Поэтому я думаю, что мне нужно использовать «хакерский» подход с использованием искры для загрузки файла, а затем преобразовать его обратно в список. Однако я оставлю этот вопрос на случай, если у кого-то есть умное решение для этого.