我有這個簡單的數據幀,看起來像這樣,如何使用spark數據框列的字面值?
+---+---+---+---+
|nm | ca| cb| cc|
+---+---+---+---+
| a|123| 0| 0|
| b| 1| 2| 3|
| c| 0| 1| 0|
+---+---+---+---+
我想要做的是,
+---+---+---+---+---+
|nm |ca |cb |cc |p |
+---+---+---+---+---+
|a |123|0 |0 |1 |
|b |1 |2 |3 |1 |
|c |0 |1 |0 |0 |
+---+---+---+---+---+
bascially增加了一個新的列p
,例如,如果nm
列的值是'一個」,檢查列ca
> 0,如果是把 '1' 塔P1,否則爲0
我的代碼,
def purchaseCol: UserDefinedFunction =
udf((brand: String) => s"c$brand")
val a = ss.createDataset(List(
("a", 123, 0, 0),
("b", 1, 2, 3),
("c", 0, 1, 0)))
.toDF("nm", "ca", "cb", "cc")
a.show()
a.withColumn("p", when(lit(DataFrameUtils.purchaseCol($"nm")) > 0, 1).otherwise(0))
.show(false)
它似乎沒有工作,並且正在爲'p'中的所有行返回0。
PS:列數超過100,它們是動態生成的。
你這是我所做的大部分,並不是真的想使用rdds和重建數據框。正在尋找更優雅的解決方案,但是,wr,+1 –