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.)
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. –