使用Spark

时间:2017-06-26 10:35:09

标签: scala apache-spark dataframe hive insert

我尝试将插入值插入Hive表中,如果每列都有值,则没有问题,但我需要在其中一列中插入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错误yarn.ApplicationMaster:用户类扔了   例外:
       scala.MatchError:scala.None.type(类        scala.reflect.internal.Types $ UniqueSingleType)
       scala.MatchError:scala.None.type(类        scala.reflect.internal.Types $ UniqueSingleType)

1 个答案:

答案 0 :(得分:2)

这个问题与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])
))