takeOrdered descending Pyspark

时间:2015-06-11 17:34:16

标签: python apache-spark

我想按值对K / V对进行排序,然后取最大的五个值。我设法用第一个地图恢复K / V,用FALSE降序排序,然后将key.value反转到原始(第二个地图),然后取前面的5个bigget,代码是这样的:

RDD.map(lambda x:(x[1],x[0])).sortByKey(False).map(lambda x:(x[1],x[0])).take(5)

我知道pySpark上有一个takeOrdered动作,但我只设法对值进行排序(而不是键),我不知道如何进行降序排序:

RDD.takeOrdered(5,key = lambda x: x[1])

1 个答案:

答案 0 :(得分:68)

按键排序(升序):

RDD.takeOrdered(5, key = lambda x: x[0])

按键排序(降序):

RDD.takeOrdered(5, key = lambda x: -x[0])

按值排序(升序):

RDD.takeOrdered(5, key = lambda x: x[1])

按值排序(降序):

RDD.takeOrdered(5, key = lambda x: -x[1])