在不使用sort()函数的情况下对PySpark RDD中的值进行排序

时间:2018-03-28 17:17:27

标签: sorting apache-spark pyspark rdd

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)
谢谢。

1 个答案:

答案 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即可。