如何在Flink的Scala案例类中使用空值?

时间:2019-05-27 19:35:10

标签: scala apache-flink

您好,我正在使用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类,但是我没有找到实现它的示例。

我想要一个方案时如何处理空值?

1 个答案:

答案 0 :(得分:-1)

那么您可以做的是:

  1. 检查.map中是否有空字段,如果您仍然希望将其保留在结果中,则将其转换为字符串"NULL""N/A"之类的其他字段,或者
  2. 使用.filter
  3. 从流中过滤掉它们