6

Ich habe erfolgreich erstellt row_number()partitionBy von in Spark mit Window, aber würde dies nach absteigend, anstatt der Standard aufsteigend sortieren. Hier ist mein Arbeitscode:Spark SQL Row_number() PartitionBy Sortieren Desc

from pyspark import HiveContext 
from pyspark.sql.types import * 
from pyspark.sql import Row, functions as F 
from pyspark.sql.window import Window 

data_cooccur.select("driver", "also_item", "unit_count", 
    F.rowNumber().over(Window.partitionBy("driver").orderBy("unit_count")).alias("rowNum")).show() 

Das gibt mir dieses Ergebnis:

+------+---------+----------+------+ 
|driver|also_item|unit_count|rowNum| 
+------+---------+----------+------+ 
| s10|  s11|   1|  1| 
| s10|  s13|   1|  2| 
| s10|  s17|   1|  3| 

Und hier füge ich ab() zu absteigender Reihenfolge:

data_cooccur.select("driver", "also_item", "unit_count", F.rowNumber().over(Window.partitionBy("driver").orderBy("unit_count").desc()).alias("rowNum")).show() 

Und diesen Fehler erhalten:

AttributeError: 'WindowSpec' object has no attribute 'desc'

Was mache ich? g falsch hier?

+0

Auf meinem PySpark (2.2.0) Ich habe zu verwenden 'row_number' statt' rowNumber' Sie können entweder ein Verfahren auf einer Säule verwendet werden. – lambruscoAcido

Antwort

12

desc sollte auf eine Spalte keine Fensterdefinition angewendet werden.

from pyspark.sql.functions import col 

F.rowNumber().over(Window.partitionBy("driver").orderBy(col("unit_count").desc()) 

oder eine eigenständige Funktion:

from pyspark.sql.functions import desc 

F.rowNumber().over(Window.partitionBy("driver").orderBy(desc("unit_count"))