默认值的火花滞后为另一列

时间:2019-04-05 14:22:39

标签: scala apache-spark pyspark apache-spark-sql lag

假设我们有

|bin | min |  end  | start | 
|1   | 5   | 10    | 
|2   | 12  | 24    | 
|3   | 28  | 36    | 
|4   | 40  | 50    | 
|5   | null| null  | 

我想将 start 填充为上一列的 end ,以生成连续的bin值。对于缺少的内容,我想用当前的 min 代替。对于空行,我考虑将其单独处理。

给我们带来的滞后会是

df.withColumn("start", F.lag(col("end"), 1, ***default_value***).over(orderBy(col("bin"))
|bin | min |  end  | start | 
|1   | 5   | 10    | (5 wanted)
|2   | 12  | 24    | 10
|3   | 28  | 36    | 24
|4   | 40  | 50    | 36
|5   | null| null  | null

我的问题:

1 /我们在 default_value 中放入滞后以占用当前行的另一列的情况,在本例中为 min

2 /有没有一种方法可以在不分隔的情况下同时处理空行?我打算过滤non-null,执行延迟,然后与空行合并回去。如果Null是第一个(bin 1)或最后一个(bin 5),答案会有什么不同?

1 个答案:

答案 0 :(得分:1)

使用<string name="default_web_client_id" translatable="false">237047375768-ma9cm63bn9goidlu99jl3fen5f6mieru.apps.googleusercontent.com</string> 获取组中第一行的列值。

coalesce

from pyspark.sql import functions as F df.withColumn("start", F.coalesce(F.lag(col("end"), 1).over(orderBy(col("bin")),col("min"))) 当前不支持lag选项,因此您可能必须分离出ignorenulls行,计算非空行的null列和{ {1}}数据帧。