a = sc.parallelize((11,7,20,10,1,7))
我想在不使用sort()函数的情况下按递增顺序对元素进行排序。
我试过了:
def srt(a,b):
if a>b:
i=a
a=b
b=i
final=a.map(lambda x,y: srt(x,y))
我没有得到所需的结果。
我想要
(1,7,7,10,11,20)
谢谢。
答案 0 :(得分:0)
如果你真的想避免sort()
,这是一种方法,但我不建议使用它。
首先调用zipWithUniqueId()
为每行添加唯一ID。然后重复将rdd
中的最小值附加到列表中,直到列表的大小等于count()
的{{1}}:
rdd
这并不能对您的a = sc.parallelize((11,7,20,10,1,7))
a = a.zipWithUniqueId()
mins = []
curr_min = a.reduce(lambda x, y: x if x[0] < y[0] else y)
mins.append(curr_min)
while(len(mins) < a.count()):
curr_min = a.filter(lambda x: all(x != m for m in mins))\
.reduce(lambda x, y: x if x[0] < y[0] else y)
mins.append(curr_min)
print([m[0] for m in mins])
#[1, 7, 7, 10, 11, 20]
进行排序,但它会按排序顺序获取值。如果您愿意,您必须将输出并行化以返回rdd
。但正如我前面提到的,这不是解决这个问题的好方法。只需拨打rdd
即可。