我有一個包含一些列的資料框,假設它們被稱為
|State| Color|Count
我想檢查該資料框中是否存在一列,因此我必須創建它。我知道對于這個小例子來說這樣做是沒有用的,因為我只有 3 列,我可以手動完成,但我想知道用更大的 DF 來完成它的方法。我首先想到的是:
var cols = df.columns
df.withColumn("x", when(col("x").between(cols(0), cols(cols.length-1)), 5).otherwise(null))
我的目的是檢查列“x”是否在 DF 中(在其列的集合中),如果不是,則使用具有空值的 withColumn 方法創建它,但我不知道是否那樣是正確的。有沒有其他方法可以做到?我的其他想法是用 foreach 回圈和 ifs 來做,但我認為這不會有效率。
uj5u.com熱心網友回復:
給出以下示例DataFrame:
val df = Seq(
("a", "blue", 2),
("b", "red", 1),
("c", "yellow", 3),
("d", "blue", 4),
).toDF("state", "colour", "count")
您可以檢查缺少的列并將它們添加到以下內容中:
val expectedColumns = Set("state", "colour", "count", "x")
val actualColumns = df.columns
val missingColumns = (expectedColumns -- actualColumns.toSet).map(lit(null).as(_))
df.select(actualColumns.map(col) missingColumns: _*)
您指定希望出現的列 ( expectedColumns),然后將其與 中的內容進行比較df。如果有任何缺失,您可以null使用適當的名稱創建一列值,然后使用 select 陳述句將它們添加回來。
uj5u.com熱心網友回復:
按照你的意圖,我不確定你為什么要完全用 withColumn 來做?
我認為更簡單、有效和可讀的方法是
val df2 = if (!df.columns.contains("x")) {
df.withColumn("x", lit(null))
} else {
df
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/361516.html
