聚合期间在数据帧上获取第一个非空值 Spark scala

Bab*_*abu 0 scala dataframe apache-spark

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

DF.groupBy("id").agg(lit(first(col("visit_id"))).alias("visit_id")
Run Code Online (Sandbox Code Playgroud)

提前致谢。

Psi*_*dom 7

您可以在以下位置使用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|
+---+--------+
Run Code Online (Sandbox Code Playgroud)