0

特定のウィンドウ内で行内に最も頻繁に発生するStringを取得し、この値を新しい行に入れたいと考えています。 (Pysparkを使用しています)行の中で最も頻繁に値を集計するスパークウィンドウ関数

これは私のテーブルのようです。

window label value 
123   a  54 
123   a  45 
123   a  21 
123   b  99 
123   b  78 

私はいくつかの凝集をやっているし、現時点では私はwindowlabelの両方でグループ化しています。

sqlContext.sql(SELECT avg(value) as avgValue FROM table GROUP BY window, label) 

これは、ウィンドウ= 123平均とラベル= Aを返し、私がやろうとしていますどのようなウィンドウ= 123とラベル= B

平均は、最も頻繁に文字列の降順を発生順labelですので、私のSQLステートメントで行うことができますSELECT first(label) as majLabel, avg(value) as avgValue FROM table GROUP BY window

私はこれをウィンドウ関数で実行しようとしていますが、それほどかなり進んでいません。

group = ["window"] 

w = (Window().partitionBy(*group)) 
+0

でウィンドウを選択し、これがそうです何かのようにアプローチする方法を知っているだろうか? Sparkのウィンドウ関数に関する専門知識があれば、D – other15

答えて

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" == zero323 @ 1

str_rank.where(col('string_rank')==1).drop('string_rank').show() 

関連する問題