apache-spark - 如何在火花中组合两列数据集
问题描述
我有一个像这样的火花数据集:
> df.show()
+------+------+
| No1 | No2 |
+------+------+
| 001 | null |
| 002 | 002 |
| 003 | 004 |
| null | 005 |
+------+------+
我想获得一个新列No3,其中包含来自No1和No2列的值,条件是如果 No1 有值则复制No1,否则如果它为空,则使用No2中的值
+------+------+------+
| No1 | No2 | No3 |
+------+------+------+
| 001 | null | 001 |
| 002 | 002 | 002 |
| 003 | 004 | 003 |
| null | 005 | 005 |
+------+------+------+
我怎样才能做到这一点?
解决方案
我认为您正在寻找的是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
推荐阅读
- c++ - 在 MinGW 上使用 SFML
- ruby - 如何调整 Daru::DataFrame 中的列宽?
- facebook-javascript-sdk - 是否有用于 Facebook 评论插件的新评论的事件处理程序?
- python - 地图返回地图对象并将其转换为列表会删除其中的所有元素
- css - 网格框之间的 SVG 线
- mysql - 如何从同一列中减去一列的平均值?
- graph - 贪心和最佳优先搜索算法有什么区别?
- cmake - CMake:将 add_library 与许多源一起使用并在 target_link_libraries 中使用时出现链接错误
- java - 暴露客户端机密是否对 oauth 2 中的隐式授权类型构成威胁?
- cloud-foundry - 我需要 cloud Foundry api 来查看日志