簡體   English   中英

如何根據時間戳范圍和行類型對 SPARK dataframe 中的行進行配對

[英]How to pair rows in SPARK dataframe based on timestamp range and row type

我有一個類似於此的 dataframe:

+------------------+---------+------------+
|    Timestamp     | RowType |   Value    |
+------------------+---------+------------+
| 2020. 6. 5. 8:12 | X       | Null       |
| 2020. 6. 5. 8:13 | Y       | Null       |
| 2020. 6. 5. 8:14 | Y       | Null       |
| 2020. 6. 5. 8:15 | A       | SomeValue  |
| 2020. 6. 5. 8:16 | Y       | Null       |
| 2020. 6. 5. 8:17 | Y       | Null       |
| 2020. 6. 5. 8:18 | X       | Null       |
| 2020. 6. 5. 8:19 | Y       | Null       |
| 2020. 6. 5. 8:20 | Y       | Null       |
| 2020. 6. 6. 8:21 | A       | SomeValue2 |
| 2020. 6. 7. 8:22 | Y       | Null       |
| 2020. 6. 8. 8:23 | Y       | Null       |
| 2020. 6. 9. 8:24 | X       | Null       |
+------------------+---------+------------+

對於每個 X 類型的行,我想 select 來自以下 A 類型的行的值。 如果兩個 X 類型之間沒有 A 類型行,則 X 行的值應保持為 null。

+------------------+---------+------------+
|    Timestamp     | RowType |   Value    |
+------------------+---------+------------+
| 2020. 6. 5. 8:12 | X       | SomeValue  |
| 2020. 6. 5. 8:18 | X       | SomeValue2 |
| 2020. 6. 9. 8:24 | X       | Null       |
+------------------+---------+------------+

這可以使用 window 函數嗎?

如果RowType僅包含這些值 (X,Y,A) 它應該可以工作:

 df.filter('RowType=!="Y")
   .select('Timestamp,'RowType,lag('Value,-1).over(Window.orderBy('Timestamp)).as("lag"))
   .filter('RowType==="X")
   .show()

output:

+----------------+-------+-----------+
|       Timestamp|RowType|        lag|
+----------------+-------+-----------+
|2020. 6. 5. 8:12|      X|SomeValue  |
|2020. 6. 5. 8:18|      X|SomeValue2 |
|2020. 6. 9. 8:24|      X|       null|
+----------------+-------+-----------+

暫無
暫無

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

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