[英]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.