【发布时间】:2020-10-22 00:35:47
【问题描述】:
假设我有以下数据框
+-------------------+------+------------+
| Date| Val| Condition|
+-------------------+------+------------+
|2020-10-02 10:00:00|211.39| Max|
|2020-10-02 10:10:00|210.94| Min|
|2020-10-02 10:30:00|209.21| Max|
|2020-10-02 11:20:00|207.48| Min|
|2020-10-02 11:50:00|207.22| Min| <- take only this row because it's less than 207.48
|2020-10-02 12:10:00|207.58| Max|
|2020-10-02 12:40:00|207.45| Min|
|2020-10-02 13:10:00|207.45| Min| <- take either row becase they are equal
|2020-10-02 13:40:00| 208.7| Max| <- take only this row because it's greater than 208.31
|2020-10-02 14:10:00|208.31| Max|
|2020-10-02 14:20:00|208.16| Min|
|2020-10-02 14:30:00| 208.3| Max|
|2020-10-02 14:50:00|208.25| Min|
|2020-10-02 15:10:00| 208.7| Max|
|2020-10-02 15:30:00|208.08| Min|
|2020-10-02 16:00:00| 208.0| Min| <- take only this row because it's less than 208.08
|2020-10-02 16:30:00|208.35| Max|
|2020-10-02 16:40:00|208.26| Min|
|2020-10-02 16:50:00|208.27| Max|
|2020-10-02 17:30:00|208.06| Min|
+-------------------+------+------------+
如何按Condition 的连续值对其进行分组,并为每个组取Val 的最大值或最小值? (例如,生成的数据框应该类似于下面的数据框)
(见上述数据框中的 cmets)。
+-------------------+------+------------+
| Date| Val| Condition|
+-------------------+------+------------+
|2020-10-02 10:00:00|211.39| Max|
|2020-10-02 10:10:00|210.94| Min|
|2020-10-02 10:30:00|209.21| Max|
|2020-10-02 11:50:00|207.22| Min|
|2020-10-02 12:10:00|207.58| Max|
|2020-10-02 12:40:00|207.45| Min|
|2020-10-02 13:40:00| 208.7| Max|
|2020-10-02 14:20:00|208.16| Min|
|2020-10-02 14:30:00| 208.3| Max|
|2020-10-02 14:50:00|208.25| Min|
|2020-10-02 15:10:00| 208.7| Max|
|2020-10-02 16:00:00| 208.0| Min|
|2020-10-02 16:30:00|208.35| Max|
|2020-10-02 16:40:00|208.26| Min|
|2020-10-02 16:50:00|208.27| Max|
|2020-10-02 17:30:00|208.06| Min|
+-------------------+------+------------+
目标是:
- 对于有多个连续行且 Condition = Max 或 Condition = Min 的每个组
- 从每组中只取一行(哪一行 - 由 Condition 的值决定 - 它是具有 Val 列最大值或最小值的行)
【问题讨论】:
-
你可以尝试按row_number除以2(四舍五入)分组
-
@madprogrammer 有点与您的输出 DF 混淆。你能详细说明一下吗?
-
@SathiyanS 我编辑了这个问题,试图让它不那么混乱
-
问题是它不能被并行化,尽管
Window.orderBy("Date")可能会给出预期的结果,但这只会使用 1 个核心并且不会随着更大的数据进行扩展。 @madprogrammer
标签: apache-spark