Я бы не хотел использовать нулевое значение для поля класса, используемого в наборе данных. Я пытаюсь использовать 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?
Примечание: это используется в промежуточном наборе данных, т.е. что-то, что не читается и не записывается (но для внутренней сериализации искры)