Как кодировать необязательные поля в наборе искровых данных с java? - PullRequest
0 голосов
/ 21 апреля 2020

Я бы не хотел использовать нулевое значение для поля класса, используемого в наборе данных. Я пытаюсь использовать scala Option и java Optional, но это не удалось:

    @AllArgsConstructor // lombok
    @NoArgsConstructor  // mutable type is required in java :(
    @Data               // see https://stackoverflow.com/q/59609933/1206998
    public static class TestClass {
        String id;
        Option<Integer> optionalInt;
    }

    @Test
    public void testDatasetWithOptionField(){
        Dataset<TestClass> ds = spark.createDataset(Arrays.asList(
                new TestClass("item 1", Option.apply(1)),
                new TestClass("item .", Option.empty())
        ), Encoders.bean(TestClass.class));

        ds.collectAsList().forEach(x -> System.out.println("Found " + x));
    }

Сбой во время выполнения с сообщением File 'generated.java', Line 77, Column 47: Cannot instantiate abstract "scala.Option"


Вопрос : Есть ли способ кодировать необязательные поля без нуля в наборе данных, используя java?

Вспомогательный вопрос: кстати, я тоже не использовал много наборов данных в scala, вы можете проверить, что это реально ли в scala кодировать класс case, содержащий поля Option?


Примечание: это используется в промежуточном наборе данных, т.е. что-то, что не читается и не записывается (но для внутренней сериализации искры)

...