小编Poo*_*dar的帖子

如何在 Spark 代码中设置 Kryo 的不可修改集合序列化器

我在 Java 中的 Spark (v1.6.1) 中使用 Kryo 序列化,并且在序列化其字段中有集合的类时,它引发以下错误 -

Caused by: java.lang.UnsupportedOperationException
         at java.util.Collections$UnmodifiableCollection.add(Collections.java:1055)
         at com.esotericsoftware.kryo.serializers.CollectionSerializer.read(CollectionSerializer.java:102)
         at com.esotericsoftware.kryo.serializers.CollectionSerializer.read(CollectionSerializer.java:18)
         at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:648)
         at com.esotericsoftware.kryo.serializers.FieldSerializer$ObjectField.read(FieldSerializer.java:605)
         ... 27 more
Run Code Online (Sandbox Code Playgroud)

我发现这是因为 Kryo 的默认 CollectionSerializer 无法反序列化集合,因为它不可修改,我们应该改用 UnmodifiableCollectionsSerializer。

我如何在 spark 代码中特别提到将 UnmodifiableCollectionsSerializer 用于 Kryo?

我目前的配置是 -

SparkConf conf = new SparkConf().setAppName("ABC");
conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer");
conf.registerKryoClasses(new Class<?>[] {*list of classes I want to register*});
Run Code Online (Sandbox Code Playgroud)

kryo apache-spark

4
推荐指数
1
解决办法
2439
查看次数

标签 统计

apache-spark ×1

kryo ×1