当我尝试序列化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
以前有人遇到过这个问题吗?有办法解决吗?
您必须使用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>