我希望在给定的窗口中连续获取最常出现的String,并将此值放在新行中。 (我正在使用Pyspark)
这就是我的表格。
window label value
123 a 54
123 a 45
123 a 21
123 b 99
123 b 78
我正在做一些聚合,目前我正在按照window
和label
进行分组。
sqlContext.sql(SELECT avg(value) as avgValue FROM table GROUP BY window, label)
这将返回窗口= 123和label = a的平均值以及window = 123和label = b的平均值
我想要做的是,通过最常出现的字符串降序命令label
,所以然后在我的sql语句中我可以做SELECT first(label) as majLabel, avg(value) as avgValue FROM table GROUP BY window
我试图在窗口函数中执行此操作,但我还没到达那里。
group = ["window"]
w = (Window().partitionBy(*group))
df = spark.createDataFrame([['123','a','54'],['123','a','45'],['123','a','21'],['123','b','99'],['123','b','78'],],['window','label','value'])
定义一个正确的WindowSpec。
win_spec = window.partitionBy(['window','label']).orderBy(col('value').desc())
返回窗口分区['window','label']中从1开始的序号。
str_rank = df.withColumn('string_rank',row_number().over(win_spec))
str_rank.show()
这就是df现在的样子:
选择“string_rank”== 1的窗口。
str_rank.where(col('string_rank')==1).drop('string_rank').show()