首页 > 解决方案 > 在聚合期间获取数据帧上的第一个非空值 spark scala

问题描述

在聚合分组期间,目前我正在取第一个值。但我需要 visit_id 列的第一个非空值。请让我知道 Spark Scala 中是否有任何方法。

DF.groupBy("id").agg(lit(first(col("visit_id"))).alias("visit_id")

提前致谢。

标签: scalaapache-sparkdataframe

解决方案


您可以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|
+---+--------+

推荐阅读