Spark select RDD 中的最高值
Spark select top values in RDD
原始数据集为:
# (numbersofrating,title,avg_rating)
newRDD =[(3,'monster',4),(4,'minions 3D',5),....]
我想select top N avg_ratings in newRDD.I 使用下面的代码,它有一个错误。
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)....]
您尝试过使用 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)]
您可以将 top
或 takeOrdered
与 key
参数一起使用:
newRDD.top(2, key=lambda x: x[2])
或
newRDD.takeOrdered(2, key=lambda x: -x[2])
请注意,top
以降序获取元素,而 takeOrdered
以升序获取元素,因此 key
函数在这两种情况下是不同的。
原始数据集为:
# (numbersofrating,title,avg_rating)
newRDD =[(3,'monster',4),(4,'minions 3D',5),....]
我想select top N avg_ratings in newRDD.I 使用下面的代码,它有一个错误。
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)....]
您尝试过使用 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)]
您可以将 top
或 takeOrdered
与 key
参数一起使用:
newRDD.top(2, key=lambda x: x[2])
或
newRDD.takeOrdered(2, key=lambda x: -x[2])
请注意,top
以降序获取元素,而 takeOrdered
以升序获取元素,因此 key
函数在这两种情况下是不同的。