我正在使用pyspark 1.5从Hive表中获取数据,并尝试使用窗口函数。
根据this的说法,存在一个名为firstValue的分析函数,它将为给定窗口提供第一个非空值。我知道它存在于蜂巢中,但我在pyspark中找不到它。
鉴于pyspark不支持UserDefinedAggregateFunctions (UDAF),有没有办法实现这一点?
发布于 2016-02-02 08:16:23
Spark >= 2.0
first采用可选的ignorenulls参数,该参数可以模拟first_value的行为
df.select(col("k"), first("v", True).over(w).alias("fv"))火花< 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""")https://stackoverflow.com/questions/35142216
复制相似问题