首页 > 解决方案 > 如何在火花中组合两列数据集

问题描述

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

> df.show()
+------+------+
| No1  | No2  |
+------+------+
| 001  | null |
| 002  | 002  |
| 003  | 004  |
| null | 005  |
+------+------+

我想获得一个新列No3,其中包含来自No1No2列的值,条件是如果 No1 有值则复制No1,否则如果它为空,则使用No2中的值

+------+------+------+
| No1  | No2  | No3  |
+------+------+------+
| 001  | null | 001  |
| 002  | 002  | 002  |
| 003  | 004  | 003  |
| null | 005  | 005  |
+------+------+------+

我怎样才能做到这一点?

标签: apache-sparkapache-spark-dataset

解决方案


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

推荐阅读