插入Map时出现UnsupportedOperationException

时间:2018-01-25 12:39:32

标签: apache-spark collections hashmap

我正在使用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获取的地图是否不可修改?

1 个答案:

答案 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}