[英]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.