如何在Flink中处理Scala case类中的空值?

如何在Flink中处理Scala case类中的空值?,scala,apache-flink,Scala,Apache Flink,您好,我正在使用Flink从S3读取JSON数据,然后解析case类的输入。问题是,当JSON字符串有一些空值时,case类不接受它,因为case类的每个字段都有一个类型(Int、string等) 在搜索一个解决方案时,我发现我可以使用Option在case类中启用null值,它可以工作,但当我尝试在从数据集转换到表后执行查询时,问题就出现了 如果我试图获取score为null的行,我将一无所获,因为Option Type表示一个对象 //Case class that I used to pa

您好,我正在使用Flink从S3读取JSON数据,然后解析case类的输入。问题是,当JSON字符串有一些空值时,case类不接受它,因为case类的每个字段都有一个类型(Int、string等)

在搜索一个解决方案时,我发现我可以使用Option在case类中启用null值,它可以工作,但当我尝试在从数据集转换到表后执行查询时,问题就出现了

如果我试图获取score为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
)
我还检查了是否可以使用行数据类型而不是接受空值的case类,但没有找到实现它的示例


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

因此,您可以做以下两种选择之一:

  • 检查
    .map
    中的空字段,并将其转换为字符串
    “NULL”
    “N/A”
    ,如果仍要将其保留在结果中,或
  • 使用
    .Filter