繁体   English   中英

将字符串转换为JavaRDD <String>

[英]Convert String to JavaRDD<String>

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

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

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

接下来,对于每个文件

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

我想做一些魔术,例如计算常用单词。 我可以访问文件及其内容的路径。

JavaRDD提供了我需要的诸如flatMap,mapToPair,reduceByKey之类的方法。 问题是,有什么方法可以将JavaPairRDD的值转换为JavaRDD?

问题是,有什么方法可以将JavaPairRDD的值转换为JavaRDD?

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

***更新:

根据您更新的问题,我认为以下内容可以满足您的需求。 我在目录“ tmp”中创建了两个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

好像这就是您要的...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM