2016-05-16 5 views
3

Ich habe einen dreispaltigen Datenrahmen auf PySpark, auf dem ich versuche, das Äquivalent von RANK() OVER(PARTITION BY ... ORDER BY ...) auf SQL zu tun. Die Datenrahmen df wie folgt aussieht:Effizienter Weg,() auf Spark zu ranken?

col1, col2, score 
A , B , 0.500 
... 

Ich weiß, ich Fensterfunktionen für diese verwenden:

from pyspark.sql.window import Window 
from pyspark.sql import functions as F 

windowSpec = Window.partitionBy(df['col1']).orderBy(df['score'].desc()) 
df = df.select('col1', 'col2', 'score', F.rank().over(windowSpec).alias('rnk')) 

Für einen sehr großen df, das viel Zeit verbringen müssten Daten schlurfen über Partitionen. Gibt es eine Möglichkeit, dies effizienter zu machen? (Ich brauche keinen Datenrahmen, wenn nicht notwendig.)

+1

Es ist schwierig, das Mischen zu vermeiden, wenn Partitionen vorhanden sind. Selbst mit RDD wäre eine "byKey" -Operation erforderlich, die etwas Mischen verursacht. Ich bin mir nicht sicher, ob es einen effizienteren Weg dafür gibt. –

Antwort

2

Dem Kommentar von @DanieldePaula hinzufügen; In Spark SQL ist es schwierig (/ normalerweise nicht möglich), Umlagerungen zu vermeiden. Ich hatte Diskussionen mit dem Shepherd von Spark-sql Michael Armbrust darüber - und die Begründung ist, dass nicht-Experten Benutzer könnte mit falschen Ergebnissen enden, wenn erlaubt, das Äquivalent von preservesPartioning=true (von vielen der Kern Operationen) in Spark SQL verwenden Abfragen.

In jedem Fall für Ihre Abfrage wäre es besonders schwierig, die Ergebnisse ohne ein Mischen zu erreichen - da Ihre Daten nicht einmal bereits richtig vorpartitioniert ist.

Wenn Sie wünschen, eine bessere Leistung zu erzielen, die Sie benötigen würde:

  • Tropfen aus Funken sql völlig
  • Pre-Partition die Daten entsprechend den gewünschten Fenster
  • führen das Äquivalent von Ihrem Fenster Operationen manuell - über den Kern Primitiven. Jetzt

derjenigediejenigedasjenige Sound Art ernst beschwerlich .. Also .. Sie wahrscheinlich wollen nur mit der Leistung, die Sie von dem Windowing leben.

Verwandte Themen