【问题标题】:first_value windowing function in pysparkpyspark中的first_value窗口函数
【发布时间】:2016-05-10 14:15:09
【问题描述】:

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

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

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

【问题讨论】:

  • link。 1.6有这个,我们可以复制吗?

标签: apache-spark pyspark apache-spark-sql window-functions


【解决方案1】:

Spark >= 2.0

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

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

Spark :

可用函数名为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""")

【讨论】:

  • 很好地呼吁使用 Hive 查询。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-16
  • 2019-09-21
  • 2018-03-14
  • 2023-02-23
  • 2018-09-08
相关资源
最近更新 更多