我有一个像这样的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 |
+------+------+------+
我该怎么做?
答案 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
希望这会有所帮助!