原始数据集为:

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

我想在newRDD中选择前N个avg_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)....]

最佳答案

您可以将toptakeOrderedkey参数一起使用:

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

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

请注意,top接受元素的降序,而takeOrdered接受升序,因此两种情况下key函数均不同。

10-06 15:34