簡體   English   中英

使用 Windows 分組 5 分鍾時間范圍

[英]Using Windows to group 5 mins timeframe

csv 文件是:

#+----+-----------+-------------------+
#|col1|       col2|          timestamp|
#+----+-----------+-------------------+
#|   0|Town Street|01-02-2017 06:01:00|
#|   0|Town Street|01-02-2017 06:03:00|
#|   0|Town Street|01-02-2017 06:05:00|
#|   0|Town Street|01-02-2017 06:06:00|
#|   0|Town Street|02-02-2017 10:01:00|
#|   0|Town Street|02-02-2017 10:05:00|
#+----+-----------+-------------------+

比較每個日期的時間,看看是否有 5 分鍾的差異,如果他們是數他們

output:

 #+----+-----------+-------------------+
#|col1|       col2|          timestamp|
#+----+-----------+-------------------+
#|   0|Town Street|01-02-2017 06:01:00|
#|   0|Town Street|01-02-2017 06:03:00|
#|   0|Town Street|01-02-2017 06:05:00|
#|   0|Town Street|01-02-2017 06:06:00|
#|   0|Town Street|02-02-2017 10:01:00|
#|   0|Town Street|02-02-2017 10:05:00|
#+----+-----------+-------------------+

現在代碼:

from pyspark.sql import SQLContext
import pyspark.sql.functions as F

    def my_main(sc, my_dataset_dir):
        sqlContext = SQLContext(sc)
        df = sqlContext.read.csv(my_dataset_dir,sep=';').rdd.zipWithIndex().filter(lambda x: x[1] > 1).map(lambda x: x[0]).toDF(['status','title','datetime'])

此代碼僅給出 null 結果 5 分鍾 window。

不確定這是否正是您想要的,但它應該將您推向正確的方向 您可以將時間戳轉換為timestamptypedatetype 創建window以按日期和rangebetween在時間戳(以秒為單位)之間進行partitionBy seconds(300)

#df.show()
#sampledataframe
#+----+-----------+-------------------+
#|col1|       col2|          timestamp|
#+----+-----------+-------------------+
#|   0|Town Street|01-02-2017 06:01:00|
#|   0|Town Street|01-02-2017 06:03:00|
#|   0|Town Street|01-02-2017 06:05:00|
#|   0|Town Street|01-02-2017 06:06:00|
#|   0|Town Street|02-02-2017 10:01:00|
#|   0|Town Street|02-02-2017 10:05:00|
#+----+-----------+-------------------+

from pyspark.sql import functions as F
from pyspark.sql.window import Window

w=Window().partitionBy("date").orderBy(F.col("timestamp").cast("long")).rangeBetween(Window.currentRow,60*5)

df.withColumn("timestamp", F.to_timestamp("timestamp",'MM-dd-yyyy HH:mm:ss'))\
  .withColumn("date", F.to_date("timestamp"))\
  .withColumn('collect', F.size(F.collect_list("timestamp").over(w))).filter("collect>1")\
  .select(F.date_format("date","yyyy-MM-dd").alias("date"), F.array(F.date_format("timestamp","HH:mm:ss"),F.col("collect")).alias("time"))\
  .orderBy("date").show()

#+----------+-------------+
#|      date|         time|
#+----------+-------------+
#|2017-01-02|[06:01:00, 4]|
#|2017-01-02|[06:05:00, 2]|
#|2017-01-02|[06:03:00, 3]|
#|2017-02-02|[10:01:00, 2]|
#+----------+-------------+

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM