将String转换为JavaRDD <string>

时间:2018-06-05 00:27:26

标签: java apache-spark java-8 mapreduce

我想对目录中的每个文本文件进行一些计算,然后使用结果计算另一个值。

要从我使用的目录中读取文件:

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

接下来,为每个文件

Do something
   first recursive call
   Do something
      second recursive call
      Do something
         third recursive call
         Ending recursive
      Ending recursive
   Ending Recursive

我想做一些像计算频繁词汇的魔法。 我可以访问文件的路径及其内容。

JavaRDD提供了我需要的flatMap,mapToPair,reduceByKey等方法。 问题是,有没有办法将JavaPairRDD的值转换为JavaRDD?

1 个答案:

答案 0 :(得分:0)

  

问题是,有没有办法将JavaPairRDD的值转换为JavaRDD?

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

***更新:

根据您更新的问题,我认为以下内容可以满足您的需求。我在目录&#34; tmp&#34;中创建了两个CSV文件。

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

似乎这就是你要求的......