您好,我正在使用Flink从S3读取JSON数据,然后将输入解析为case类。问题在于,当JSON字符串具有某些null值时,case类不接受它,因为case类的每个字段都具有类型(Int,String等)。
在搜索解决方案时,我发现可以使用Option将空值启用到case类中并且可以使用,但是问题是当我尝试从Dataset转换为Table后执行查询时。
如果我尝试获取分数为null的行,则说明Option Type代表对象没有任何原因。
//Case class that I used to parse a JSON
case class TestTableSchema(
id: String,
score: Option[Double]
)
val data: Dataset[TestTableSchema] = ...
tableEnv.registerDataSet("test_table", data)
val result = tableEnv.sqlQuery("""
|SELECT *
|FROM test_table
|WHERE score IS NULL
""".stripMargin
)
我还检查了我是否可以使用Row数据类型而不是可以接受null值的case类,但是我没有找到实现它的示例。
我想要一个方案时如何处理空值?
答案 0 :(得分:-1)
那么您可以做的是:
.map
中是否有空字段,如果您仍然希望将其保留在结果中,则将其转换为字符串"NULL"
或"N/A"
之类的其他字段,或者.filter