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