如何使用kryo序列化程序

时间:2016-10-05 21:02:09

标签: serialization apache-spark parquet kryo

我正在尝试使用Kryo序列化程序编写特定类型的列表,但是当我尝试读取/写入时我遇到错误。我正在使用apache spark为KryoRegistrator提供的源代码

我尝试编写的列表是List<A>类型,可以是ArrayList或任何其他类型的列表

代码

Class FakeRegsitrator implements KryoRegistrator{

  @Override
  public void registerClasses(Kryo kryo) {
      CollectionSerializer listSerializer = new CollectionSerializer();
      listSerializer.setElementClass(A.class, kryo.getSerializer(A.class));
      listSerializer.setElementsCanBeNull(false);

      kryo.register(A.class, new Serializer<A>(true, true) {
         public void write(Kryo kryo, Output output, A a) {
             output.writeLong(a.getFieldA)
             output.WriteString(a.getFieldB)
         }
         public A read(Kryo kryo, Input input, Class type) {
             return new A(input.readLong(), input.readString())
         }
  }
}

我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

我能够通过注册Arraylist.class

来使其工作

代码:

kryo.register(ArrayList.class);

in read method use 
kryo.readObject(input, ArrayList.class);

in write method use
kryo.writeObject(output, entry.getArchivePortions());