3
我在PySpark上有三列數據框,我試圖在SQL上執行相當於RANK() OVER(PARTITION BY ... ORDER BY ...)
的操作。數據幀df
樣子:有效的方式來排序()在火花?
col1, col2, score
A , B , 0.500
...
我知道我可以使用窗口功能如下:
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'))
對於一個非常大的df
,這將需要花費大量的時間跨分區洗牌的數據。有什麼辦法可以讓這個效率更高? (如果沒有必要,我不需要使用數據幀。)
當有partitionBy envolved時,很難避免洗牌。即使使用RDD,也需要'byKey'操作,導致一些洗牌。我不確定是否有更有效的方法來做到這一點。 –