Scala 如何拾取数据帧中某些行的相邻行,spark
有一个包含2列的数据帧:[时间:时间戳,值:双精度] 这里我们定义了一个规则来查找值的异常值。除此之外,我们希望拾取包含异常值的行的相邻行。 例如,数据帧是: 红色的第7行包含我们定义的异常值,我们希望得到第4~10行,第7行旁边的3行 如何实现这一点?我想中间划船可能是另一种选择,但我不知道如何选择Scala 如何拾取数据帧中某些行的相邻行,spark,scala,apache-spark,Scala,Apache Spark,有一个包含2列的数据帧:[时间:时间戳,值:双精度] 这里我们定义了一个规则来查找值的异常值。除此之外,我们希望拾取包含异常值的行的相邻行。 例如,数据帧是: 红色的第7行包含我们定义的异常值,我们希望得到第4~10行,第7行旁边的3行 如何实现这一点?我想中间划船可能是另一种选择,但我不知道如何选择 谢谢 是的,您可以将窗口函数与行一起使用,如下所示: val df = Seq( (1,220), (2,220), (3,220), (4,220), (5,220),
谢谢 是的,您可以将窗口函数与行一起使用,如下所示:
val df = Seq(
(1,220),
(2,220),
(3,220),
(4,220),
(5,220),
(6,230),
(7,220),
(8,220),
(9,220),
(10,220)
).toDF("time","value")
df
.withColumn("is_outlier",$"value">220)
.withColumn("outlier_region",max($"is_outlier").over(Window.orderBy($"time").rowsBetween(-3L,3L)))
.show()
给出:
+----+-----+----------+--------------+
|time|value|is_outlier|outlier_region|
+----+-----+----------+--------------+
| 1| 220| false| false|
| 2| 220| false| false|
| 3| 220| false| true|
| 4| 220| false| true|
| 5| 220| false| true|
| 6| 230| true| true|
| 7| 220| false| true|
| 8| 220| false| true|
| 9| 220| false| true|
| 10| 220| false| false|
+----+-----+----------+--------------+
谢谢此外,如果有重叠怎么办?例如,时间6和7是异常值,在这种情况下,它们的公共邻居将被视为接近其中一个。以时间8为例,我们如何证明时间8是时间6和时间7的邻居,而不是其中一个?@Susu在这种情况下,使用数字而不是布尔值,使用sum而不是max,值为2意味着两个异常值在附近