Spark在RDD中选择最高值

use*_*475 7 python apache-spark rdd

原始数据集是:

# (numbersofrating,title,avg_rating)
newRDD =[(3,'monster',4),(4,'minions 3D',5),....] 
Run Code Online (Sandbox Code Playgroud)

我想在newRDD中选择前N个avg_ratings.我使用下面的代码,它有一个错误.

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

TypeError: map() takes no keyword arguments
Run Code Online (Sandbox Code Playgroud)

预期数据应为:

# (numbersofrating,title,avg_rating)
selectnewRDD =[(4,'minions 3D',5),(3,'monster',4)....] 
Run Code Online (Sandbox Code Playgroud)

zer*_*323 14

您可以使用toptakeOrdered使用key参数:

newRDD.top(2, key=lambda x: x[2])
Run Code Online (Sandbox Code Playgroud)

要么

newRDD.takeOrdered(2, key=lambda x: -x[2])
Run Code Online (Sandbox Code Playgroud)

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

  • 是否可以使用RDD执行相同的操作,但保留RDD? (3认同)