【问题标题】:How to combine two columns of dataset in spark如何在火花中组合两列数据集
【发布时间】:2018-08-17 03:56:44
【问题描述】:
我有一个这样的火花数据集:
> df.show()
+------+------+
| No1 | No2 |
+------+------+
| 001 | null |
| 002 | 002 |
| 003 | 004 |
| null | 005 |
+------+------+
我想获得一个新列 No3,其中包含列 No1 和 No2 中的值,条件是复制 No1 如果它有值,否则如果它为空,则使用 No2
中的值
+------+------+------+
| No1 | No2 | No3 |
+------+------+------+
| 001 | null | 001 |
| 002 | 002 | 002 |
| 003 | 004 | 003 |
| null | 005 | 005 |
+------+------+------+
我该怎么做?
【问题讨论】:
标签:
apache-spark
apache-spark-dataset
【解决方案1】:
我认为您正在寻找的是 coalesce。
import org.apache.spark.sql.functions._
val data = spark.sparkContext.parallelize(Seq(
("001", null),
("002", "002"),
("003", "004"),
(null, "005")
)).toDF("No1", "No2")
val resultDf = data.withColumn("No3", coalesce($"No1", $"No2"))
resultDf.show
【解决方案2】:
您可以检查No1 列是否为null。如果是null,则取No2 的值
import org.apache.spark.sql.functions._
val data = spark.sparkContext.parallelize(Seq(
("001", null),
("002", "002"),
("003", "004"),
(null, "005")
)).toDF("No1", "No2")
val resultDf = data.withColumn("No3", when($"No1".isNull, $"No2").otherwise($"No1"))
resultDf.show
输出:
+----+----+---+
|No1 |No2 |No3|
+----+----+---+
|001 |null|001|
|002 |002 |002|
|003 |004 |003|
|null|005 |005|
+----+----+---+
希望这会有所帮助!