2016-07-14 17 views
4
code: 

mydf = testDF.groupBy(testDF.word).count() 
mydf.show() 

output: 

+-----------+-----+ 
|  word|count| 
+-----------+-----+ 
|  she| 2208| 
| mothers| 93| 
|  poet| 59| 
|  moving| 18| 
|  active| 6| 
|  foot| 169| 

Ich wollte diesen Datenrahmen basierend auf der Anzahl der Wörter in absteigender Reihenfolge bestellen.Zugriff auf die Zählungsspalte in PySpark

code: 

countDF = mydf.orderBy(mydf.count.desc()) 
countDF.show() 

Error: 

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

Bitte lassen Sie mich wissen, wo ich falsch liege.

+2

Überprüfen Sie diese http://stackoverflow.com/questions/30332619/how-to-sort-by-column-in-descending-order-in-spark-sql – Kyriakos

+0

@ Kgiou Es ist kein Duplikat. Das Problem ist hier Python-spezifisch. – zero323

Antwort

3

Nun, Punktnotation ist nicht die beste Methode, um auf Spalten zuzugreifen. Während bietet DataFrame Spalte bewusst __getattr__ können Sie Konflikte wie diese Begegnung, wo Namen (hier DataFrame.count) so anstatt es besser ist, Klammer-Notation zu verwenden, um ein Verfahren lösen wird:

mydf.orderBy(mydf["count"].desc()) 

oder col Funktion:

from pyspark.sql.functions import col 

mydf.orderBy(col("count").desc()) 

zu Referenzspalten.

+0

Es gibt eine weitere Option, 'mydf.sort (-col (" count "))' –

+1

@AlbertoBonsanto 'desc (" count ")'. 'desc'-Methoden sind etwas generischer, da sie keinen Typ benötigen, der' -' unterstützt. Dennoch denke ich, es geht mehr um getaktete Mechanik als um das Sortieren. – zero323