2016-11-22 30 views
0

我有一个大的数据与数以百万计的记录集是类似识别火花值降低(异常)

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

可以使用滞后窗口功能,使以前的值到范围:

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

另一种方法是指定一个行号(如果没有的话),滞后该列,然后将该行加入到上一行,以便进行比较。

HTH