Apache spark 火花窗函数按行中最频繁的值聚合
我希望获得给定窗口中一行中出现频率最高的字符串,并将该值放在新行中。(上午使用Pyspark) 这就是我的桌子的样子Apache spark 火花窗函数按行中最频繁的值聚合,apache-spark,pyspark,apache-spark-sql,spark-dataframe,window-functions,Apache Spark,Pyspark,Apache Spark Sql,Spark Dataframe,Window Functions,我希望获得给定窗口中一行中出现频率最高的字符串,并将该值放在新行中。(上午使用Pyspark) 这就是我的桌子的样子 window label value 123 a 54 123 a 45 123 a 21 123 b 99 123 b 78 我正在做一些聚合,目前我正在按窗口和标签进行分组 sqlContext.sql(SELEC
window label value
123 a 54
123 a 45
123 a 21
123 b 99
123 b 78
我正在做一些聚合,目前我正在按窗口
和标签
进行分组
sqlContext.sql(SELECT avg(value) as avgValue FROM table GROUP BY window, label)
这将返回window=123和label=a的平均值以及window=123和label=b的平均值
我试图做的是,通过最常出现的字符串降序来排序label
,这样在我的sql语句中,我就可以从表组中按窗口选择第一个(label)作为majLabel,选择avg(value)作为avgValue
我试图在一个窗口函数中实现这一点,但我还没有完全做到
group = ["window"]
w = (Window().partitionBy(*group))
定义一个右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的窗口
@zero323这似乎是你应该知道如何处理的事情?鉴于您对Spark窗口功能的专业知识:D
str_rank = df.withColumn('string_rank',row_number().over(win_spec))
str_rank.show()
str_rank.where(col('string_rank')==1).drop('string_rank').show()