【发布时间】:2018-05-30 04:15:06
【问题描述】:
我有一个要求,其中数据帧按 col1(时间戳)排序,我需要按 col2 过滤。
col2 值小于前一行的 col2 值的任何行,我需要过滤掉该行。结果应该是 col2 值单调递增。
请注意,这不仅仅是两行。
例如,假设 4 行的 col2 的值为 4,2,3,5。结果应该是 4,5,因为第 2 行和第 3 行都小于 4(第一行值)。
val input = Seq(
(1,4), (2,2), (3,3), (4,5), (5, 1), (6, 9), (7, 6)
).toDF("timestamp", "value")
scala> input.show
+---------+-----+
|timestamp|value|
+---------+-----+
| 1| 4|
| 2| 2|
| 3| 3|
| 4| 5|
| 5| 1|
| 6| 9|
| 7| 6|
+---------+-----+
val expected = Seq((1,4), (4,5), (6, 9)).toDF("timestamp", "value")
scala> expected.show
+---------+-----+
|timestamp|value|
+---------+-----+
| 1| 4|
| 4| 5|
| 6| 9|
+---------+-----+
请注意:
- 第 2 行和第 3 行被过滤掉,因为它的值小于第 1 行中的值,即 4
- 第 5 行被过滤掉,因为它的值小于第 4 行中的值,即 6
一般来说,有没有一种方法可以根据一行的值与前一行中的值的比较来过滤行?
【问题讨论】:
标签: apache-spark apache-spark-sql