pyspark 中的 first_value 窗口函数

lib*_*ber 5 window-functions apache-spark apache-spark-sql pyspark

我正在使用 pyspark 1.5 从 Hive 表中获取数据并尝试使用窗口函数。

根据存在所谓的解析函数firstValue,这将使我定的窗口的第一个非空值。我知道这存在于 Hive 中,但我无法在 pyspark 的任何地方找到它。

鉴于 pyspark 不允许 UserDefinedAggregateFunctions (UDAF),有没有办法实现这一点?

zer*_*323 11

火花 >= 2.0

first接受一个可选ignorenulls参数,它可以模仿以下行为first_value

df.select(col("k"), first("v", True).over(w).alias("fv"))
Run Code Online (Sandbox Code Playgroud)

火花 < 2.0

调用可用函数first,可以按如下方式使用:

df.select(col("k"), first("v", True).over(w).alias("fv"))
Run Code Online (Sandbox Code Playgroud)

但如果您想忽略空值,则必须直接使用 Hive UDF:

df = sc.parallelize([
    ("a", None), ("a", 1), ("a", -1), ("b", 3)
]).toDF(["k", "v"])

w = Window().partitionBy("k").orderBy("v")

df.select(col("k"), first("v").over(w).alias("fv"))
Run Code Online (Sandbox Code Playgroud)