在带有复合键的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()
答案 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 。