我正在使用Spark的collectAsMap
函数[Spark CollectAsMap来获取地图。在此地图中,当我执行put
操作时,我收到以下异常:
ERROR ApplicationMaster: User class threw exception: java.lang.UnsupportedOperationException
java.lang.UnsupportedOperationException
at java.util.AbstractMap.put(AbstractMap.java:209)
从collectAsMap获取的地图是否不可修改?
答案 0 :(得分:3)
我假设你在使用Java。您收到此错误,因为在java spark中,collectAsMap
返回scala映射周围的java包装器。在Spark 2.2中,此包装器是定义的in this source file自定义类。如您所见,它没有定义put方法,因此您的错误。
解决方法可能是将地图简单地复制到java HashMap中,如下所示
List<Tuple2<Integer, Integer>> list = new ArrayList<>();
list.add(new Tuple2<>(1,2));
list.add(new Tuple2<>(3,4));
Map<Integer, Integer> map = sc.parallelize(list)
.mapToPair( x->x )
.collectAsMap();
Map<Integer, Integer> newMap = new HashMap<>(map);
newMap.put(7, 8);
System.out.println(newMap);
产生预期的{1=2, 3=4, 7=8}
。