在下面的代码中,我尝试将文本文件作为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();
});
}
答案 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对象的数据。)