在Spark DataFrame中基于旧列添加新列

时间:2018-05-07 07:39:24

标签: scala apache-spark apache-spark-sql

我有一个数据框如下。

key     | value
inv_1_c | 5
inv_1_v | 8
inv_2_c | 9

我想在数据帧电压和电流中添加两列。

如果密钥以Voltage结束,则

"_v"将为值,否则为0。

如果密钥以Current结尾,则

"_c"将为值,否则为0。

这会是什么scala spark代码?

1 个答案:

答案 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      |
+-------+-----+-------+-------+

希望这有帮助!