假设我们有
|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),答案会有什么不同?
答案 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}}数据帧。