[英]how to make nested iteration over spark dataset and drop element
嗨,我有一個Track.class的數據集,我想合並在同一時間間隔內的所有軌道,例如5分鍾。即,任何一條在5分鍾內結束的軌道之后開始的軌道都將是同一軌道。它看起來像融合任務。
我的輸入:
+----------+---------------------------------------------+
| trackId | start_time | end_time |
+-----+--------------------------------------------------+
| 1 | 12:00:00 | 12:04:00 |
+----------+---------------------------------------------+
| 2 | 12:05:00 | 12:08:00 |
+----------+---------------------------------------------+
| 3 | 12:20:00 | 12:22:00 |
+----------+---------------------------------------------+
輸出:(trackId:1,2被合並,因為每個開始和結束的差異在5分鍾之內)
+----------+----------------+----------------------------+
| trackId | start_time | end_time |
+-----+--------------------------------------------------+
| 1 | 12:00:00 | 12:08:00 |
+----------+---------------------------------------------+
| 3 | 12:20:00 | 12:22:00 |
+----------+----------------+----------------------------+
那我該怎么辦呢?
您沒有給出確切的架構,但實際上您想使用Spark的window
函數。 就像是
df.groupBy(window(df.col("time"),"50 seconds").agg(first("id").as("id"))
我可以使用Lead函數在列中追加下一個開始時間的值,然后減去當前結束日期和下一個開始日期,僅此而已。
> dataset.withColumn("lead",lead(dataset.col(start_date),1).over(orderBy(start_date)));
+----------+---------------------------------------------+
| trackId | start_time | end_time | lead |
+-----+--------------------------------------------------+
| 1 | 12:00:00 | 12:04:00 | 12:05:00 |
+----------+---------------------------------------------+
| 2 | 12:05:00 | 12:08:00 | 12:20:00 |
+----------+---------------------------------------------+
| 3 | 12:20:00 | 12:22:00 | null |
+----------+---------------------------------------------+
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.