首页 > 解决方案 > 带有空值的 Seq[(Int,Int)] 隐式转换为 DataFrame

问题描述

我有一个将 a 转换Seq[(Int,Int)]为 DataFrame 的简单测试用例:

test("SparkTest 0280") {
  val conf = new SparkConf().set("spark.sql.codegen.wholeStage", "false").set("spark.sql.cbo.enabled", "true")
  val spark = SparkSession.builder().config(conf).master("local").appName("SparkTest").enableHiveSupport().getOrCreate()

  import spark.implicits._

  Seq[(Int,Int)]((null, 1), (2, null), (null, 3)).toDF("a", "b").createOrReplaceTempView("t")
  spark.sql("select a,b,nvl(a,b) from t").show(truncate = false)
}

有一个编译问题:

Error:(565, 21) an expression of type Null is ineligible for implicit conversion
    Seq[(Int,Int)]((null, 1), (2, null), (null, 3)).toDF("a", "b").createOrReplaceTempView("t")

这里有什么问题?

标签: scalaapache-sparknullapache-spark-sql

解决方案


如果你想使用nulls你应该替换Intsjava.lang.Integers

Seq[(Integer, Integer)]((null, 1), (2, null), (null, 3)).toDF("a", "b")
// org.apache.spark.sql.DataFrame = [a: int, b: int]

可以为空。


推荐阅读