【问题标题】:How to handle with null values in Scala case classes in Flink?如何在 Flink 的 Scala 案例类中处理空值?
【发布时间】:2019-10-13 08:32:07
【问题描述】:

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

搜索解决方案我发现我可以使用 Option 将空值启用到案例类中并且它可以工作,但是当我尝试在从数据集转换为表后进行查询时出现问题。

如果我尝试获取分数为空的行,我没有任何原因,因为 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 数据类型而不是接受空值的案例类,但我没有找到一些示例来实现它。

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

【问题讨论】:

    标签: scala apache-flink


    【解决方案1】:

    所以你可以做的是:

    1. 检查 .map 中的空字段并将其转换为字符串 "NULL""N/A" 等其他字符串(如果您仍希望将它们保留在结果中),或者
    2. 使用.filter 将它们从您的信息流中过滤掉

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-09
      • 2014-01-17
      • 1970-01-01
      • 2017-09-29
      • 1970-01-01
      • 1970-01-01
      • 2021-01-27
      相关资源
      最近更新 更多