java - 如何立即返回 String Builder 对象作为 rdd ?或者将 String Builder 对象转换为 rdd?

标签 java csv apache-spark stringbuilder rdd

在下面的代码中,我尝试将文本文件读取为 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/

相关文章:

java - 字符串转int parseInt

java - 使用 JPanel 在 GUI 中相互覆盖的层

r - 文件中的错误(文件, "rt"): cannot open the connection

java - 如何使用java将.xls文件导入mysql数据库?

java - 结果打印到控制台但不打印到文件

java - 正则表达式,试图匹配不超过一个句点?

java - 通过 'Parameters' 选项卡将查询参数传递给 GET 请求

java - 使用 Spark 1.6.2 从控制台删除调试日志

scala - 记录器在集群上的 spark UDF 内不工作

scala - ElasticClient提供NullPointerException