Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 火花窗函数按行中最频繁的值聚合_Apache Spark_Pyspark_Apache Spark Sql_Spark Dataframe_Window Functions - Fatal编程技术网

Apache spark 火花窗函数按行中最频繁的值聚合

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

我希望获得给定窗口中一行中出现频率最高的字符串,并将该值放在新行中。(上午使用Pyspark)

这就是我的桌子的样子

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()