Spark在RDD中选择最高值

时间:2015-08-07 16:08:45

标签: python apache-spark rdd

原始数据集是:

# (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)....] 

2 个答案:

答案 0 :(得分:14)

您可以toptakeOrdered使用key参数:

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

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

请注意,top按升序排列元素,takeOrdered升序,因此key函数在两种情况下都不同。

答案 1 :(得分:4)

您是否尝试过使用top?鉴于您需要最高平均评级(并且它是元组中的第三项),您需要使用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)]