如何按Spark中的值对嵌套列表结构的RDD进行排序?

时间:2016-01-05 17:44:12

标签: apache-spark pyspark

我的RDD具有以下(键,值)格式:

value

注意到,(term,count)这里是元组列表:.map(lambda (a,b): (b,a)).sortByKey(False).map(lambda (a,b): (b,a))

我尝试使用以下方法按值对此rdd进行排序:

term

但它产生了countcount

的排序RDD

问题是如何按[((u'en', 1),[('term2', 8),('term3', 6),('term1', 2))] 对此RDD进行排序,仅产生以下内容:

fireButton.click(funktion(){fireButton handle()})

2 个答案:

答案 0 :(得分:2)

假设您的RDD包含键值对,其中键是元组本身,值是元组列表,并且您只想对元组列表进行排序:

rdd.map(lambda (k, v): (k, sorted(v, key=lambda x: x[1], reverse=True)))

如果你想通过关键元组中的计数(('en', 2)中的2)进一步对结果进行排序,你可以这样做:

rdd.map(lambda (k, v): (k, sorted(v, key=lambda x: x[1], reverse=True)))
   .sortBy(lambda (k, v): k[1], False)

答案 1 :(得分:1)

我不完全确定我理解你的问题,但我认为你想要使用每个{{1的第二个值对每个List条目的值RDD进行排序。 }}

tuple

您可以找到其他方式对from operator import itemgetter rdd = sc.parallelize([("a", [("x", 1), ("y", 2), ("z", 3), ("a", 4), ("b", 5)]), ("b", [("u", 7), ("d", 6),("p", 5), ("v", 8), ("b", 10)])]) rdd.collect() # [('a', [('x', 1), ('y', 2), ('z', 3), ('a', 4), ('b', 5)]), # ('b', [('u', 7), ('d', 6), ('p', 5), ('v', 8), ('b', 10)])] rdd = rdd.map(lambda (k, l): (k, sorted(l, key=itemgetter(0), reverse=True))) rdd.collect() # [('a', [('b', 5), ('a', 4), ('z', 3), ('y', 2), ('x', 1)]), # ('b', [('b', 10), ('v', 8), ('u', 7), ('d', 6), ('p', 5)])] s Sorting lists in Python进行排序。