考慮下面的數據幀如何篩選可空陣列的元素星火1.6 UDF
root
|-- values: array (nullable = true)
| |-- element: double (containsNull = true)
與內容:
+-----------+
| values|
+-----------+
|[1.0, null]|
+-----------+
現在我想thie value
列傳遞到UDF:
val inspect = udf((data:Seq[Double]) => {
data.foreach(println)
println()
data.foreach(d => println(d))
println()
data.foreach(d => println(d==null))
""
})
df.withColumn("dummy",inspect($"values"))
我真的很迷惑上面println
的陳述輸出:
1.0
null
1.0
0.0
false
false
我的問題:
- 爲什麼
foreach(println)
不給輸出foreach(d=>println(d))
一樣嗎? Double
如何在第一個println語句中爲null,我認爲scala的Double
不能爲null?- 如何過濾我的
Seq
其他漢氏過濾中的空值0.0
這真的不安全?我應該使用Seq[java.lang.Double]
作爲UDF中輸入的類型,然後過濾空值? (這個工作,但我不能確定這是要走的路)
請注意,我所知道的this Question,但我的問題是特定於數組類型的列。