2016-11-26 6 views
3

私はスパークの初心者です。私は最も訪問されたウェブページを取得できるようにリクエストしています。スパークリクエスト最大数

私の要求は、私は最大のカウントを有する唯一のデータフレーム取得この要求に以下の

mostPopularWebPageDF = logDF.groupBy("webPage").agg(functions.count("webPage").alias("cntWebPage")).agg(functions.max("cntWebPage")).show() 

ですが、私はこのスコアこのスコアと保持しているWebページとのデータフレームを取得したい

次のようなものがあります。

webPage   max(cntWebPage) 
google.com   2 

問題を解決するにはどうすればよいですか?

ありがとうございます。 pyspark + SQLで

答えて

2

logDF.registerTempTable("logDF") 

mostPopularWebPageDF = sqlContext.sql("""select webPage, cntWebPage from (
              select webPage, count(*) as cntWebPage, max(count(*)) over() as maxcnt 
              from logDF 
              group by webPage) as tmp 
              where tmp.cntWebPage = tmp.maxcnt""") 

たぶん私はそれをきれいにすることができますが、それは動作します。私はそれを最適化しようとします。

マイ結果:データセットの

webPage  cntWebPage 
google.com 2 

webPage usersid 
google.com 1 
google.com 3 
bing.com 10 

説明:通常のカウントをグループ化+ COUNT(*)関数を介して行われます。すべてのこれらのカウントは、上記データセットのように即時DATAFRAME// MAXCOUNT列を落とすことなく、窓関数によって計算されているのマックスは、次のとおりです。

webPage count maxCount 
google.com 2  2 
bing.com 1  2 

その後、我々はMAXCOUNT

EDITに等しい数と行を選択します。私が持っています削除されたDSLバージョン - それはウィンドウオーバー()をサポートしておらず、注文は結果を変更しています。このバグを残念に思っています。 SQLのバージョンが正しい

+0

おかげであなたの助けを借りてください:) – JackR

+0

あなたが助けてくれたら、@JackR、受け入れられたようにuptove +マークを付けてください。 –

+0

OPは物事がどのように進行するかについてはっきりと分かりません。 :) – eliasah