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

How to return a String Builder Object at once as an rdd ? Or Convert a String Builder object to an rdd?

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

我得到的输出是(重复) 一种 b

一个 b c

一个 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();

});
}

首先,最后我会保存 transformedRdd.saveAstextFile() 而不是 Gillespie 所说的 exposuresRdd。

我能够通过在 returning 字符串时使用新的 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();

 });
}

这将确保每次您 return StringBuilder 对象时,它只会在该特定调用时附加数据。 现在的输出是 - > a b c d e f
如果我们对所有调用使用相同的 StringBuilder 对象,输出将是 -> a
ab abc abcd abcde abcdef
(因为在前面的调用中附加到 StringBuilder 对象的数据。)