web-dev-qa-db-ja.com

Spark RDDの上位値を選択

元のデータセットは次のとおりです。

# (numbersofrating,title,avg_rating)
newRDD =[(3,'monster',4),(4,'minions 3D',5),....] 

NewRDDで上位Navg_ratingsを選択したいのですが、次のコードを使用していますが、エラーが発生します。

selectnewRDD = (newRDD.map(x, key =lambda x: x[2]).sortBy(......))

TypeError: map() takes no keyword arguments

期待されるデータは次のとおりです。

# (numbersofrating,title,avg_rating)
selectnewRDD =[(4,'minions 3D',5),(3,'monster',4)....] 
7
user3849475

topまたはtakeOrderedのいずれかをkey引数とともに使用できます。

newRDD.top(2, key=lambda x: x[2])

または

newRDD.takeOrdered(2, key=lambda x: -x[2])

topは要素を降順で取得し、takeOrderedは昇順で取得するため、key関数はどちらの場合も異なることに注意してください。

14
zero323

top を使用してみましたか?最高の平均評価が必要な場合(そしてそれはタプルの3番目の項目です)、lambda関数を使用してそれをキーに割り当てる必要があります。

# items = (number_of_ratings, title, avg_rating)
newRDD = sc.parallelize([(3, 'monster', 4), (4, 'minions 3D', 5)])
top_n = 10
>>> newRDD.top(top_n, key=lambda items: items[2])
[(4, 'minions 3D', 5), (3, 'monster', 4)]
4
Alexander