繁体   English   中英

Scala Spark Sql - 从 Hive 行读取 null 值

[英]Scala Spark Sql - Reading null values from a Hive row

我有一个具有以下架构的 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

我不控制值如何填充到 hive 表中。 即使广泛搜索 web,我也发现很难克服这个错误。 也许我在某个地方漏掉了一些线索。 有人可以帮忙吗? 谢谢

如果我正确理解您的代码,您想将 field_3.field_3_2 的空值替换为零值,对吗?

我试图模拟它,但我没有收到这个错误(它不会用零填充我),也许你应该试试这个:

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")))

它会在零处替换空值(如果该字段是 NotNull 它将保留原始值)。

回答我自己的问题:

原来问题出在json-serde-1.3-jar-with-dependencies上,将其替换为1.3.8版本并修复了它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM