Преобразовать строку в JavaRDD <String> - PullRequest
0 голосов
/ 05 июня 2018

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

Для чтения файлов из каталога я использую:

JavaPairRDD<String, String> textFiles = sc.wholeTextFiles(PATH);

Далее, для каждого файла

textFiles.foreach(file -> processFile(file));

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

JavaRDD предлагает такие методы, как flatMap, mapToPair, lowerByKey, которые мне нужны.Вопрос в том, есть ли способ преобразовать значение JavaPairRDD в JavaRDD?

1 Ответ

0 голосов
/ 05 июня 2018

Вопрос в том, есть ли способ преобразовать значение JavaPairRDD в JavaRDD?

textFiles.keys(); //Return an RDD with the keys of each tuple.
textFiles.values(); // Return an RDD with the values of each tuple.

*** ОБНОВЛЕНИЕ:

Согласно вашемуобновленный вопрос, я думаю, что ниже достигается то, что вам нужно.Я создал два CSV-файла в каталоге "tmp".

one.csv:

one,1
two,2
three,3

two.csv:

four,4
five,5
six,6

Затем запустил следующий код ЛОКАЛЬНО:

String appName = UUID.randomUUID().toString();
SparkConf sc = new SparkConf().setAppName(appName).setMaster("local");
JavaSparkContext jsc = new JavaSparkContext(sc);

JavaPairRDD<String, String> fS = jsc.wholeTextFiles("tmp");

System.out.println("File names:");
fS.keys().collect().forEach(new Consumer<String>(){
    public void accept(String t)
    {
        System.out.println(t);
    }});

System.out.println("File content:");
fS.values().collect().forEach(new Consumer<String>(){
    public void accept(String t)
    {
        System.out.println(t);
    }});    
jsc.close();

Производитследующий вывод (я удалил все ненужные выходные данные Spark и отредактировал пути к моим каталогам)

File names:
file:/......[my dir here]/one.csv
file:/......[my dir here]/two.csv
File content:
one,1
two,2
three,3
four,4
five,5
six,6

Похоже, это то, что вы просили ...

...