如何作为rdd一次返回String Builder对象?或者将String Builder对象转换为rdd?

时间:2015-09-28 14:28:27

标签: java csv apache-spark stringbuilder rdd

在下面的代码中,我尝试将文本文件作为rdd读取,并且我正在调用map方法,因为我想转置每一行并将其附加到String Builder对象。但是我想在完成每一行后返回String Builder对象。但在这里,我将在每一行返回它。所以当我做一个曝光Rdd.saveAsTextFile()。

我得到的输出为(重复) 一个 B'/ P>

一 b ç

一 b C d

我希望它在哪里 一个 b C d Ë ˚F

不应该重复

JavaRDD<String> exposuresRdd = ctx.textFile(fname);

JavaRDD<String> transformedrdd= exposuresRdd.flatMap(new Function<String, String>() {

        @Override
        public String call(String line) throws Exception {
sb.append(Something);
return sb.toString();

});
}

1 个答案:

答案 0 :(得分:0)

首先,我会保存transformedRdd.saveAstextFile()而不是像Gillespie所说的那样曝光R.dd。

我能够在返回字符串时使用新的String Builder对象来解决重复数据的问题。

由于使用相同的String Builder对象已经包含了前面附加的行,我在最终输出中得到了重复的数据。

JavaRDD<String> exposuresRdd = ctx.textFile(fname);

StringBuilder sb = null;
JavaRDD<String> transformedrdd= exposuresRdd.flatMap(new Function<String,String>() {

    @Override
    public String call(String line) throws Exception {
sb = new StringBuilder(); 
sb.append(Something);
return sb.toString();

 });
}

这将确保每次返回StringBuilder对象时,它只会在该特定调用时附加数据。 现在的输出是    - &gt; a b c d e f
如果我们对所有调用使用相同的StringBuilder对象,则输出将为 - &gt;一个
AB abc abcd abcde abcdef
(因为先前调用中附加到StringBuilder对象的数据。)