first_value pyspark 中的窗口函数



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

据此,存在一个名为 firstValue 的分析函数,它将为我提供给定窗口的第一个非空值。我知道这存在于 Hive 中,但我在任何地方都找不到它。

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

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

相关内容

  • 没有找到相关文章

最新更新