【发布时间】:2017-09-11 08:33:12
【问题描述】:
我可能错过了一些基本的 Spark 概念。我正在尝试将整数的 RDD 转换为逗号分隔的字符串。目前我通过将 RDD 收集为 List 并使用它的 Iterator 来做到这一点。但是,在分析 JVM 时,似乎它将所有工作都集中在一个看起来效率不高的线程中。因此,我试图在 RDD 本身上调用 forEach 方法,但它的行为很奇怪。下面是我的单元测试
JavaRDD<Integer> rdd = jsc.parallelize(Arrays.asList(1,2,3));
StringBuilder sb = new StringBuilder("");
rdd.foreach(t->{
System.out.println(String.valueOf(t));
if(sb.length() > 0)
sb.append(",");
sb.append(String.valueOf(t));
System.out.println(sb);
});
System.out.println(sb.length());
输出:
1
3
2
2
3
1
0
显然 StringBuilder 在每次调用时都会重新实例化。还有其他方法吗?
【问题讨论】:
标签: apache-spark rdd