我有一个数据框如下。
key | value
inv_1_c | 5
inv_1_v | 8
inv_2_c | 9
我想在数据帧电压和电流中添加两列。
如果密钥以Voltage
结束,则 "_v"
将为值,否则为0。
Current
结尾,则 "_c"
将为值,否则为0。
这会是什么scala spark代码?
答案 0 :(得分:2)
您可以使用subString
函数获取最后两个字符并检查其是否包含_v
或_c
,并添加两个新列withColumn
import org.apache.spark.sql.functions._
val data = Seq(
("inv_1_c", "5"),
("inv_1_v", "8"),
("inv_2_c", "9")
).toDF("key", "value")
data.withColumn("temp", substring($"key", -2, 2))
.withColumn("voltage", when($"temp" === "_v", $"value").otherwise(0))
.withColumn("current", when($"temp" === "_c", $"value").otherwise(0))
.drop("temp")
输出:
+-------+-----+-------+-------+
|key |value|voltage|current|
+-------+-----+-------+-------+
|inv_1_c|5 |0 |5 |
|inv_1_v|8 |8 |0 |
|inv_2_c|9 |0 |9 |
+-------+-----+-------+-------+
希望这有帮助!