2016-11-26 12 views
-1

私は1時間間隔で平均で一日の最も忙しい時間を見つけるようにリクエストしたいと思います。Spark Request with time

"%d /%b /%Y:%H:%M:%S"形式でデータフレームに行の日付があります。

私はそのように始まる:

mostBusyTimeDF = logDF.groupBy("date") ... 

たとえば入力の場合:

   date 
2015-12-01 21:04:00 
2015-12-01 10:04:00 
2015-12-01 21:07:00 
2015-12-01 21:34:00 

出力では:私は知りませんした後

   date   count(1 hour interval) 
2015-12-01 21:04:00       3 
2015-12-01 10:04:00       1 

私はそれをどのように行うことができます。..

私を助けることができますか?あなたが使用することができます

どうもありがとう

+0

あなたは私たちにサンプル入力と出力を提供することはできますか?たとえば、1 AM - 10の要求、2 AM - 20の要求などを作成しますか? –

+0

@T.Gawęda私は質問 – JackR

+0

を編集するのは、指定された時間の最初の日付のみであるべきですか? –

答えて

1

は内蔵のスパーク日付関数:

from pyspark.sql.functions import * 

logDF = sqlContext.createDataFrame([("2015-12-01 21:04:00", 1), ("2015-12-01 10:04:00", 2), ("2015-12-01 21:07:00", 9), ("2015-12-01 21:34:00", 1)], ['somedate', 'someother']) 

busyTimeDF = logDF.groupBy(year("somedate").alias("cnt_year"), \ 
    month("somedate").alias("cnt_month"), \ 
    dayofmonth("somedate").alias("cnt_day"), \ 
    hour('somedate').alias("cnt_hour")) \ 
     .agg(functions.count("*").alias("cntHour")) 

cond = [busyTimeDF.cnt_year == year(logDF.somedate), \ 
    busyTimeDF.cnt_month == month(logDF.somedate), \ 
    busyTimeDF.cnt_day == dayofmonth(logDF.somedate), \ 
    busyTimeDF.cnt_hour == hour(logDF.somedate)] 

busyTimeDF.join(logDF, cond).select('somedate', 'cntHour').show() 
+0

ありがとうたくさんの男私はすべてを理解:) – JackR