所以对于这样的事情:
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)
为什么
stringOne
是 nullable?
奇怪的是,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/