2016-07-14 12 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| 

このデータ・フレームは、ワード・カウントに基づいて降順で並べ替える必要がありました。PySparkのカウント・カラムへのアクセス

code: 

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

Error: 

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

どこが間違っているのか教えてください。

+2

これを確認してくださいhttp://stackoverflow.com/questions/30332619/how-to-sort-by-column-in-descending-order-in-spark-sql – Kyriakos

+0

@kgi重複していません。ここでの問題はPython固有の問題です。 – zero323

答えて

3

ドット表記は、列にアクセスする最も良い方法ではありません。

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

またはcol機能:

from pyspark.sql.functions import col 

mydf.orderBy(col("count").desc()) 
DataFrameが意識列 __getattr__を提供していますが、あなたはその代わりに、ブラケット表記を使用することをお勧めします名前(ここでは DataFrame.count)メソッドに解決され、この1のような競合が発生することができます

を参照する列。

+0

もう一つのオプション 'mydf.sort(-col(" count "))' –

+1

@AlbertoBonsanto 'desc(" count ")もあります。 'desc'メソッドは' -'をサポートする型を必要としないため、少し一般的です。それでも、私は自分自身を分類するよりも 'getattr'の仕組みについてもっと考えていると思います。 – zero323

関連する問題