在spark中使用dataframe将空值插入配置单元

imzjd6km  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(446)

我正在尝试向配置单元表中插入值,如果每一列都有一个值,则没有问题,但我需要在其中一列中插入null值。我是这样做的:

val errorsToAlert = List(("source1", "table1","27-01-2002", null))
val data = sqlContext.createDataFrame(errorsToAlert).toDF("source", 
"table_name", "open_date", "close_date")
data.write.mode("append").saveAsTable("management.alerts")

我尝试了null和none,但都表示此错误:
17/06/26 11:59:38 error.applicationmaster:用户类引发异常:
scala.matcherror:scala.none.type(属于scala.reflect.internal.types$uniquesingletype类)
scala.matcherror:scala.none.type(属于scala.reflect.internal.types$uniquesingletype类)

lzfw57am

lzfw57am1#

这个问题与Hive完全无关。如果你检查一下 errorsToAlert 你会看到:

List[(String, String, String, Null)]

以及 scala.Null 不是可接受的输入 Dataset .
如果所需类型本身可为空,则可以显式指定它:

sqlContext.createDataFrame(Seq(
  ("source1", "table1","27-01-2002", null: String)
))

否则使用 scala.Option :

sqlContext.createDataFrame(Seq(
  ("source1", "table1","27-01-2002", None: Option[Int])
))

相关问题