如何在Spark中合并两列数据集

时间:2018-08-17 03:56:45

标签: apache-spark apache-spark-dataset

我有一个像这样的spark数据集:

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

我该怎么做?

2 个答案:

答案 0 :(得分:4)

我认为您正在寻找的是 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

答案 1 :(得分:1)

您可以检查No1的{​​{1}}列。如果其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

希望这会有所帮助!