我希望在使用数据集中的类的字段时,不要使用null值。我尝试使用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',第77行,第47列:无法实例化抽象类"scala.Option"
问题:有没有一种方法可以在Java中对可选字段进行编码而不使用null,在数据集中?
子问题:顺便问一下,在Scala中是否可以编码包含Option字段的case class?
注意:这用于中间数据集,即不读也不写的东西(但用于Spark内部序列化)