0
如果我有一個名爲DF是數據框的樣子:在DataFrame.withColumn中,如何檢查列的值是否爲null作爲第二個參數的條件?
+----+----+
| a1+ a2|
+----+----+
| foo| bar|
| N/A| baz|
|null| etc|
+----+----+
我可以選擇像這樣替換值:
val df2 = df.withColumn("a1", when($"a1" === "N/A", $"a2"))
使DF2看起來像:
+----+----+
| a1+ a2|
+----+----+
| foo| bar|
| baz| baz|
|null| etc|
+----+----+
但爲什麼我不能檢查它是否爲空,如:
val df3 = df2.withColumn("a1", when($"a1" === null, $"a2"))
讓我得到:
+----+----+
| a1+ a2|
+----+----+
| foo| bar|
| baz| baz|
| etc| etc|
+----+----+
編輯:$ 「A1」 .isNull似乎並沒有工作。難道是因爲我正在構建我用來測試的數據框,如下所示?
val schema = StructType(
StructField("a1", StringType, false) ::
StructField("a2", StringType, false) :: Nil
)
val data = sc.parallelize(Array(
Row("foo","bar"),
Row("N/A","baz"),
Row(null,"etc"))
)
val df = sqlContext.createDataFrame(data, schema)
我也不能使用聚結,據我所知,因爲有時我需要使用一個靜態值,而不是另一列的值。
再次編輯:將我的測試列設置爲nullable = false並沒有幫助。
謝謝 - 我想的isNull,它似乎並沒有工作。我添加了一些關於如何構建測試數據框的細節,以防發生問題。我也不認爲我可以使用coalesce,因爲有時我需要使用靜態值而不是另一列的值 – yoel
@yoel它因爲你的模式有nullable = false;)它不能使用null –
當然哇- 謝謝!!! – yoel