我想在给定的窗口中连续获取最常出现的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)
返回window = 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))
答案 0 :(得分:0)
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()