2016-11-22 5 views
0

Ich habe ein großes mit Millionen von Datensatz gesetzt Daten, dieIdentifizierung Abnahme der Werte in Funken (Ausreißer)

so etwas wie ist
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* 

Likes, Kommentare usw. rollen Summen und sie zu erhöhen annehmen. Wenn es für einen Film etwas gibt, müssen seine schlechten Daten identifiziert werden.

Ich habe erste Gedanken über groupby Film und dann in der Gruppe sortieren. Ich benutze Dataframes in Spark 1.6 für die Verarbeitung und es scheint nicht erreichbar zu sein, da es keine Sortierung innerhalb der gruppierten Daten im Datenframe gibt.

Etwas für die Erkennung von Ausreißern zu bauen, kann ein anderer Ansatz sein, aber aufgrund der Zeitbeschränkung habe ich es noch nicht erforscht.

Kann ich das irgendwie erreichen?

Danke !!

Antwort

1

Sie können die Log-Fenster-Funktion verwenden, um die vorherigen Werte in den Gültigkeitsbereich zu bringen:

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

Ein weiterer Ansatz eine Zeilennummer zuzuordnen wäre (wenn es nicht ein ohnehin schon ist), Verspätet die Spalte und fügt die Zeile in die vorherige Zeile ein, damit Sie den Vergleich durchführen können.

HTH