2016-11-26 7 views
0

平均で最も忙しい曜日を検索したいと思っています。スパーク要求回数平均

私のデータフレームにフィールドの日(月曜日、火曜日...)があります。

私の要求は次のとおりです。

mostBusyDayDF = logDF.groupBy("day_week") 
    .agg(functions.count("day_week").alias("cntDay")) 
    .groupBy("cntDay").agg(functions.avg("cntDay").alias("avgDay")) 
    .orderBy(functions.desc("avgDay")).limit(1).show() 

結果は、すべての数の和の平均であるが、私は毎日の平均を持っていると思います。例えば

マイ入力

day_week 
    Monday 
    Tuesday 
    Monday 
    Monday 

私はどのように私は私の問題を解決することができ

day_week  count()  avg() 
    Monday   1   1/(1+2+4+2) 
    Tuesday   2   2/(1+2+4+2) 
    Monday   4   4/(1+2+4+2) 
    Monday   2   2/(1+2+4+2) 

出力にしたいですか?

ありがとうございます。

+0

この例を受け入れることについてどう思いますか? http://datascience.stackexchange.com/a/15320/5177 – eliasah

+0

同じことではありません。私は私のカウントの平均を持っています – JackR

+0

私はそれが同じことではないことを知っていますが、あなたが質問し、あなたの問題を解決するための答えを受け入れる必要があります。 – eliasah

答えて

2

あなたは列が最初にカウント合計する必要がありますし、それを行うには多くの方法がある例:あなたはこの合計を持っていたら

​​

は、あなたが和等によってによって除算あなたのグループを実行することができます。

mostBusyDayDF = logDF.groupBy("day_week") 
     .agg(functions.count("day_week").alias("cntDay")) 
     .withColumn("avgDay" , col("cntDay")/functions.lit(sum_count)) 
mostBusyDayDF.show() 

注:​​3210リテラル値の列を作成します。

+0

何が点灯していますか? – JackR

+0

@JackR関数 - 'pyspark.sql.functions import *'からインポートしてください –

+1

あなたは最高です:) – JackR

関連する問題