Я думаю, что есть проблема с v1.addAll(v2);
, вам нужно создать и вернуть новый список:
@Override
public List<String> call(List<String> v1, List<String> v2) throws Exception {
List<String> list = new ArrayList<String>(v1);
list.addAll(v2);
return list;
// in java 8
// return Stream.concat(a.stream(), b.stream()).collect(Collectors.toList())
}
Более того, если вы используете Java 8, вы можете использовать лямбда-выражения и делать это в одну строку,см. пример ниже:
JavaPairRDD<String, List<String>> pair = spark.range(10L)
.toJavaRDD()
.mapToPair(s -> Tuple2.apply(
Long.valueOf(s % 3).toString(),
Arrays.asList(s % 2, s, s + 1)
.stream()
.map(z -> z.toString())
.collect(Collectors.toList())
)
);
pair.foreach(s -> System.out.println(s._1 + "," + s._2.toString()));
pair.reduceByKey((a, b) ->
Stream.concat(a.stream(), b.stream()).collect(Collectors.toList())
).foreach(s -> System.out.println(s._1 + "," + s._2.toString() + "gr. count: " + s._2.size()));
вывод:
0,[0, 0, 1]
1,[1, 1, 2]
2,[0, 2, 3]
0,[1, 3, 4]
1,[0, 4, 5]
2,[1, 5, 6]
0,[0, 6, 7]
1,[1, 7, 8]
2,[0, 8, 9]
0,[1, 9, 10]
0,[0, 0, 1, 1, 3, 4, 0, 6, 7, 1, 9, 10]gr. count: 12
2,[0, 2, 3, 1, 5, 6, 0, 8, 9]gr. count: 9
1,[1, 1, 2, 0, 4, 5, 1, 7, 8]gr. count: 9