插入地图时不支持的操作异常

San*_*hay 5 collections hashmap apache-spark

我正在使用 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)
Run Code Online (Sandbox Code Playgroud)

从 collectAsMap 获得的地图是不可修改的吗?

Oli*_*Oli 9

我假设您正在使用 Java。您收到此错误是因为在 java spark 中,collectAsMap返回一个围绕 Scala 映射的 java 包装器。在 Spark 2.2 中,此包装器是此源文件中定义的自定义类。如您所见,它没有定义 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);
Run Code Online (Sandbox Code Playgroud)

这产生了预期的{1=2, 3=4, 7=8}.