PySpark 如何按值排序,如果值相等按键排序?

PySpark how to sort by a value, if the values are equal sort by the key?

例如:

tmp = [('a', 1), ('e', 1), ('b', 1), ('f', 3), ('d', 4), ('c', 5)]
sc.parallelize(tmp).sortBy(lambda x: x[1]).collect()

# in this way, it only sorts the value.
[('a', 1), ('e', 1), ('b', 1), ('f', 3), ('d', 4), ('c', 5)]

我想要的是如果两个值相等,然后比较键('a'、'b'、'c'、'd' ...)

预期输出为:

[('a', 1), ('b', 1), ('e', 1), ('f', 3), ('d', 4), ('c', 5)]

我知道使用sortBy两次很容易实现,先对键排序,然后对值排序。不过,我觉得如果数据集是分布式的,可能不太可行。

是否有任何 lambda 函数可以解决这个问题?

您可以按第二个元素排序,然后是第一个元素:

sc.parallelize(tmp).sortBy(lambda x: [x[1], x[0]]).collect()
[('a', 1), ('b', 1), ('e', 1), ('f', 3), ('d', 4), ('c', 5)]