Uploaded image for project: 'Flink'
  1. Flink
  2. FLINK-17320

Java8 lambda expression cannot be serialized.

    XMLWordPrintableJSON

Details

    Description

      It happens when we want to use java.util.PriorityQueue in customed UDAF. The serialization error occurs with codes below.

      @Test
      public void test() throws IOException {
              PriorityQueue<String> pq = new PriorityQueue<>((o1, o2) -> o1.length - o2.length - 1);
              pq.add("1234135");
              pq.add("12323424135");
      
              KryoSerializer kryoSerializer = new KryoSerializer(PriorityQueue.class, new ExecutionConfig());
              kryoSerializer.serialize(pq, new DataOutputSerializer(10240));
      }
      

      And the NPE will be thrown:

      Caused by: java.lang.NullPointerException
              at com.esotericsoftware.kryo.util.DefaultClassResolver.writeClass(DefaultClassResolver.java:80)
              at com.esotericsoftware.kryo.Kryo.writeClass(Kryo.java:488)
              at com.esotericsoftware.kryo.Kryo.writeClassAndObject(Kryo.java:593)
              at org.apache.flink.runtime.types.PriorityQueueSerializer.write(PriorityQueueSerializer.java:67)
              at org.apache.flink.runtime.types.PriorityQueueSerializer.write(PriorityQueueSerializer.java:40)
              at com.esotericsoftware.kryo.Kryo.writeClassAndObject(Kryo.java:599)
              at org.apache.flink.api.java.typeutils.runtime.kryo.KryoSerializer.serialize(KryoSerializer.java:307)
              at org.apache.flink.util.InstantiationUtil.serializeToByteArray(InstantiationUtil.java:526)
      

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              wind_ljy Jiayi Liao
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: