我有一个包含数百万条记录的大型数据集,类似于
Movie Likes Comments Shares Views
A 100 10 20 30
A 102 11 22 35
A 104 12 25 45
A *103* 13 *24* 50
B 200 10 20 30
B 205 *9* 21 35
B *203* 12 29 42
B 210 13 *23* *39*
喜欢,评论等是滚动总数,他们假设增加。如果电影中有任何一个掉落,那么需要识别出错误的数据。
我对groupby电影有初步想法,然后在组内进行排序。我正在使用spark 1.6中的数据帧进行处理,但它似乎无法实现,因为数据帧中的分组数据中没有排序。
为异常检测提供一些东西可能是另一种方法,但由于时间限制,我还没有探索过它。
无论如何我能做到这一点吗?
谢谢!
答案 0 :(得分:1)
您可以使用滞后窗函数将以前的值带入范围:
import org.apache.spark.sql.expressions.Window
val windowSpec = Window.partitionBy('Movie).orderBy('maybesometemporalfield)
dataset.withColumn("lag_likes", lag('Likes, 1) over windowSpec)
.withColumn("lag_comments", lag('Comments, 1) over windowSpec)
.show
https://jaceklaskowski.gitbooks.io/mastering-apache-spark/content/spark-sql-functions.html#lag
另一种方法是分配一个行号(如果还没有一个),滞后该列,然后将该行加到它的前一行,以便进行比较。 / p>
HTH