当Kryo序列化与Spark一起使用时,ProtoBuf中的NullPointerException

问题描述 投票:1回答:1

当我尝试序列化protobuf字段时,我在spark应用程序中遇到以下错误,该字段是键String和value float的映射。 Spark应用程序正在使用Kryo序列化。

Caused by: java.lang.NullPointerException
    at com.google.protobuf.UnmodifiableLazyStringList.size(UnmodifiableLazyStringList.java:68)
    at java.util.AbstractList.add(AbstractList.java:108)
    at com.esotericsoftware.kryo.serializers.CollectionSerializer.read(CollectionSerializer.java:134)
    at com.esotericsoftware.kryo.serializers.CollectionSerializer.read(CollectionSerializer.java:40)
    at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:731)
    at com.esotericsoftware.kryo.serializers.ObjectField.read(ObjectField.java:125)
    ... 71 more

以前有人遇到过这个问题吗?有办法解决吗?

apache-spark kryo protobuf-java
1个回答
0
投票

您必须使用kryo注册ProtobufSerializer才能序列化protobuf。

StreamExecutionEnvironment.getExecutionEnvironment()。registerTypeWithKryoSerializer(YourProtobufClass.class,ProtobufSerializer.class);

在依赖项下面添加访问ProtobufSerializer类。

    <dependency>
        <groupId>de.javakaffee</groupId>
        <artifactId>kryo-serializers</artifactId>
        <version>0.45</version>
    </dependency>
© www.soinside.com 2019 - 2024. All rights reserved.