sortPyKey()由PySpark中的复合键

时间:2018-01-06 03:15:13

标签: pyspark rdd

在带有复合键的RDD中,是否可以使用第一个元素按升序排序,当它们都是字符串类型时,可以按第二顺序降序排序?我在下面提供了一些虚拟数据。

 z = [(('a','b'), 3), (('a','c'), -2), (('d','b'), 4), (('e','b'), 6), (('a','g'), 8)]  

rdd = sc.parallelize(z)

rdd.sortByKey(False).collect() 

1 个答案:

答案 0 :(得分:1)

也许有更高效的方式,但这里有一个:

str_to_ints = lambda s, i: [ord(c) * i for c in s]
rdd.sortByKey(keyfunc=lambda x: (str_to_ints(x[0], 1), str_to_ints(x[1], -1))).collect()
# [(('a', 'g'), 8), (('a', 'c'), -2), (('a', 'b'), 3), (('d', 'b'), 4), (('e', 'b'), 6)]

基本上将键中的字符串转换为整数列表,第一个元素乘以 1 ,第二个元素乘以 -1