pyspark中的first_value窗口函数

问题描述 投票:2回答:1

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

根据this,存在一个名为firstValue的分析函数,它将给出给定窗口的第一个非空值。我知道这存在于Hive中,但我无法在pyspark中找到它。

有没有办法实现这个,因为pyspark不允许UserDefinedAggregateFunctions(UDAFs)?

apache-spark pyspark apache-spark-sql window-functions
1个回答
3
投票

Spark> = 2.0:

first采用可选的ignorenulls参数,可以模仿first_value的行为:

df.select(col("k"), first("v", True).over(w).alias("fv"))

Spark <2.0:

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

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"))

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

df.registerTempTable("df")

sqlContext.sql("""
    SELECT k, first_value(v, TRUE) OVER (PARTITION BY k ORDER BY v)
    FROM df""")
© www.soinside.com 2019 - 2024. All rights reserved.