【发布时间】:2017-10-08 02:06:38
【问题描述】:
我有一个看起来像这样的简单数据框,
+---+---+---+---+
|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 |
+---+---+---+---+---+
基本上添加了一个新列p,这样,如果列nm 的值为'a',则检查列ca 是否>0,如果是,则为列p1 设置'1',否则为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)
它似乎不起作用,并且为 col 'p' 中的所有行返回 0。
PS:列数超过100,是动态生成的。
【问题讨论】:
标签: apache-spark