scala - 在聚合期间获取数据帧上的第一个非空值 spark scala
问题描述
在聚合分组期间,目前我正在取第一个值。但我需要 visit_id 列的第一个非空值。请让我知道 Spark Scala 中是否有任何方法。
DF.groupBy("id").agg(lit(first(col("visit_id"))).alias("visit_id")
提前致谢。
解决方案
您可以ignoreNulls
在中使用参数first
:
示例:
val df = Seq((1, Some(2)), (1, None), (2, None), (2, Some(3))).toDF("id", "visit_id")
df.show
+---+--------+
| id|visit_id|
+---+--------+
| 1| 2|
| 1| null|
| 2| null|
| 2| 3|
+---+--------+
df.groupBy("id").agg(first("visit_id", ignoreNulls=true).as("visit_id")).show
+---+--------+
| id|visit_id|
+---+--------+
| 1| 2|
| 2| 3|
+---+--------+
推荐阅读
- azure - 是否可以使用服务原则对 Azure DevOps 分析视图进行身份验证?
- javascript - 如何比较当前字符串与javascript中给定的n个字符串相同
- python - “使用功能打开”失败
- c++ - 在 main() 之前调试 Windows 服务失败(由 LocalSystem 用户运行时出现错误 1053)
- azure-active-directory - Azure AD B2C - 在社交登录期间如何在合并之前询问并验证现有本地帐户的密码
- opengl - 用 pbo 生成 mipmap 太慢?
- php - 使用 php 和 ajax 插入和更新 sql 查询
- android - 在 google fit 中提供数据
- vue.js - 使用 nyc“全部”选项的赛普拉斯代码覆盖率不会将源代码报告为“未覆盖”
- elasticsearch - Elasticsearch 无法使用术语和存在查询检索数据