识别spark值(异常值)的减少

时间:2016-11-22 15:53:23

标签: apache-spark apache-spark-sql spark-dataframe

我有一个包含数百万条记录的大型数据集,类似于

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中的数据帧进行处理,但它似乎无法实现,因为数据帧中的分组数据中没有排序。

为异常检测提供一些东西可能是另一种方法,但由于时间限制,我还没有探索过它。

无论如何我能做到这一点吗?

谢谢!

1 个答案:

答案 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