从配置单元行读取空值

5cnsuln7  于 2021-06-25  发布在  Hive
关注(0)|答案(2)|浏览(309)

我有一张Hive桌 table_1 使用以下模式

field_1 string
field_2 string
field_3 
  - field_3_1 string
  - field_3_2 double (nullable)

当我有一个具有以下值的条目时

field_1: "100"
field_2: "name"
field_3: 
  - field_3_1: "category_1"
  - field_3_2: null

我试图从scala中读取这个值,如下所示

sparkSession.sql("select field_1, field_3 from table_1 where field_1 ='100'").na
      .fill(new lang.Double(0), Seq("field_3.field_3_2")).foreach { r =>
          println(r)
    }

我总是遇到这个错误

java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Double

我不控制如何在配置单元表中填充值。我发现即使在网上进行广泛的搜索,也很难克服这个错误。也许我错过了一些线索。有人能帮忙吗?谢谢

rkttyhzu

rkttyhzu1#

回答我自己的问题:
原来问题出在 json-serde-1.3-jar-with-dependencies ,将其替换为版本 1.3.8 这就解决了问题。

ibps3vxo

ibps3vxo2#

如果我正确理解你的代码,你想把字段3.field\u3\u2的空值替换成零值,对吗?
我试着模拟它,但我没有得到这个错误(尽管它没有用零填充我),也许你应该试试这个:

spark.sql("select field_1, field_3 from table_1")
        .withColumn("field_3.field_3_2",when(col("field_3.field_3_2").isNull(),lit(0)).otherwise(col("field_3.field_3_2")))

它将在0处替换null(如果字段不是null,它将保留原始值)。

相关问题