在下面的代码中,我尝试将文本文件读取为 rdd,并调用 map 方法,因为我想转置每一行并将其附加到 String Builder 对象。但我想在完成每一行后返回 String Builder 对象。但在这里我在每一行返回它。所以当我执行 ExposuresRdd.saveAsTextFile() 时。
我得到的输出为(重复) A
一个 乙
一个 乙 C d
我想要的地方 A 乙 C d e
不应该重复
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。
在返回字符串时,我能够通过使用新的字符串生成器对象来解决数据重复的问题。
由于使用相同的 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 对象时,它只会在该特定调用中附加数据。
现在的输出将是
-> a b c d e f
如果我们对所有调用使用相同的 StringBuilder 对象,则输出将是 -> a
ab
abc abcd abcde abcdef
(因为在前面的调用中附加到 StringBuilder 对象的数据。)
关于java - 如何立即返回 String Builder 对象作为 rdd ?或者将 String Builder 对象转换为 rdd?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32825528/