所以对于这样的事情:

case class RandomClass(stringOne: String, stringTwo: String, numericOne: Int)
val ds = Seq(
  RandomClass("a", null, 1),
  RandomClass("a", "x", 3),
  RandomClass("a", "y", 4),
  RandomClass("a", null, 5)
).toDS()

ds.printSchema()

结果是
root
 |-- stringOne: string (nullable = true)
 |-- stringTwo: string (nullable = true)
 |-- numericOne: integer (nullable = false)

为什么 stringOnenullable? 奇怪的是,numericOne 是正确推断的。我想我只是缺少有关 Dataset 和 DataFrame API 之间关系的一些信息?

最佳答案



因为 Scala String 只是一个 Java String 而不像 Scala Int 可以是 null 。实际内容(存在 null 值或缺少它)根本无关紧要。

另见 spark why do columns change to nullable true

关于apache-spark - 为什么即使指定了所有值,Spark SQL 也会为字符串列打开可为空?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43148045/

10-12 22:52