2016-11-27 11 views
2

私のデータフレームの列の上位5つの値を取得しようとしています。Pysparkデータフレームのnlargest値を取得するより効率的な方法

データフレームのサンプルを以下に示します。実際、元のデータフレームには何千もの行があります。

Row(item_id=u'2712821', similarity=5.0) 
Row(item_id=u'1728166', similarity=6.0) 
Row(item_id=u'1054467', similarity=9.0) 
Row(item_id=u'2788825', similarity=5.0) 
Row(item_id=u'1128169', similarity=1.0) 
Row(item_id=u'1053461', similarity=3.0) 

私が思い描いた解決策は、すべてのデータフレームをソートして最初の5つの値を取得することでした。 (下のコードはそれを行います)

items_of_common_users.sort(items_of_common_users.similarity.desc()).take(5) 

私は、これをより速く達成する方法があるのだろうかと思います。 おかげ

答えて

1

あなたはkeyRDD.topメソッドを使用することができます。

from operator import attrgetter 

df.rdd.top(5, attrgetter("similarity")) 

ありDataFrameRDDへの転換の重要なオーバーヘッドがあるが、それはそれだけの価値でなければなりません。

関連する問題