2017-03-31 40 views
2

因此,對於這樣的事情:即使在指定了所有值的情況下,Spark SQL爲什麼在字符串列上可以爲空?

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正確的推斷。我假設我只是缺少關於數據集和DataFrame API之間關係的東西?

回答

1

這是事實,星火使得上依賴於推斷出的類型是否位於斯卡拉對象層次的AnyRefAnyVal側爲空的最佳猜測,但還要注意,它可能更復雜比起那個來說。例如,當使用Parquet文件時,出於兼容性目的,的所有內容被推斷爲nullable

同時,當你創建一個模式,你可以簡單地設置nullable = true無處不在,如果你喜歡:

StructField(fieldName, LongType, nullable = true) 

// or using a "DSL" 
$"fieldName".long.copy(nullable = false) 
相關問題