所以我试图以这种格式对数据进行排序......
[((0, 4), 3), ((4, 0), 3), ((1, 6), 1), ((3, 2), 3), ((0, 5), 1)...
按键升序然后按值降序。我能够通过......实现这一目标。
test = test.sortBy(lambda x: (x[0], -x[1]))
这将基于上面的缩短版本给我...
[((0, 4), 3), ((0, 5), 1), ((1, 6), 1), ((3, 2), 3), ((4, 0), 3)...
我遇到的问题是在排序后我不再需要该值,但需要在对数据进行分组后保留排序。所以......
test = test.map(lambda x: (x[0][0],x[0][1]))
给我......
[(0, 4), (0, 5), (1, 6), (3, 2), (4, 0)...
仍然按照我需要的顺序,但我需要按键对元素进行分组。然后我使用这个命令......
test = test.groupByKey().map(lambda x: (x[0], list(x[1])))
但是在这个过程中我失去了分类。有什么办法保留吗?
答案 0 :(得分:0)
我设法通过更改元组的格式来保留订单......
test = test.map(lambda x: (x[0][0],(x[0][1],x[1]))
test = test.groupByKey().map(lambda x: (x[0], sorted(list(x[1]), key=lambda x: (x[0],-x[1]))))
[(0, [(4, 3), (5, 1)] ...
给我留下了我想要摆脱的价值(元组中的第二个元素)但是也照顾了它......
test = test.map(lambda x: (x[0], [e[0] for e in x[1]]))
感觉有点hacky但不确定如何做到这一点。