火花选择RDD中的最大值

2024-07-07 07:59:11 发布

您现在位置:Python中文网/ 问答频道 /正文

原始数据集是:

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

我想在newRDD中选择前N个平均值。我使用以下代码,它有一个错误。

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

Tags: key代码map原始数据title错误avg平均值
2条回答

可以将toptakeOrderedkey参数一起使用:

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

或者

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

注意top按降序接受元素,而takeOrdered按升序接受元素,因此key函数在这两种情况下都是不同的。

你试过用^{}吗?考虑到您想要最高的平均值(而且它是元组中的第三个项),您需要使用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)]

相关问题 更多 >