Joh*_*ohn 3 scala apache-spark apache-spark-sql
我的数据框是这样的
id value date
1 100 2017
1 null 2016
1 20 2015
1 100 2014
Run Code Online (Sandbox Code Playgroud)
我想获取最新的先前值,但忽略null
id value date recent value
1 100 2017 20
1 null 2016 20
1 20 2015 100
1 100 2014 null
Run Code Online (Sandbox Code Playgroud)
使用引导窗口功能时,有什么方法可以忽略空值。
在Spark中使用前导窗口功能时是否可以忽略空值
它不是。
我想获取最新值,但忽略null
只需将last(或first)与ignoreNulls:
def last(columnName: String, ignoreNulls: Boolean): Column聚合函数:返回组中列的最后一个值。
默认情况下,该函数返回其看到的最后一个值。当ignoreNulls设置为true时,它将返回它看到的最后一个非空值。如果所有值都为null,则返回null。
import org.apache.spark.sql.functions._
import org.apache.spark.sql.expressions._
val df = Seq(
(1, Some(100), 2017), (1, None, 2016), (1, Some(20), 2015),
(1, Some(100), 2014)
).toDF("id", "value", "date")
df.withColumn(
"last_value",
last("value", true).over(Window.partitionBy("id").orderBy("date"))
).show
+---+-----+----+----------+
| id|value|date|last_value|
+---+-----+----+----------+
| 1| 100|2014| 100|
| 1| 20|2015| 20|
| 1| null|2016| 20|
| 1| 100|2017| 100|
+---+-----+----+----------+
Run Code Online (Sandbox Code Playgroud)