PySpark - sortByKey()方法以原始顺序从k,v对返回值

lag*_*zul 2 python sorting apache-spark rdd pyspark

我需要能够从RDD返回(键,值)对的值列表,同时保持原始顺序.

我在下面列出了我的解决方法,但我希望能够一次性完成所有工作.

就像是:

myRDD = [(1, 2582), (3, 3222), (4, 4190), (5, 2502), (6, 2537)]
values = myRDD.<insert PySpark method(s)>
print values
>>>[2582, 3222, 4190, 2502, 2537]
Run Code Online (Sandbox Code Playgroud)

我的解决方法:

myRDD = [(1, 2582), (3, 3222), (4, 4190), (5, 2502), (6, 2537)]

values = []
for item in myRDD.sortByKey(True).collect():
                 newlist.append(item[1])
print values
>>>[2582, 3222, 4190, 2502, 2537]
Run Code Online (Sandbox Code Playgroud)

谢谢!

zer*_*323 7

如果按"原始顺序"表示键的顺序,那么您只需要在排序后添加地图:

myRDD.sortByKey(ascending=True).map(lambda (k, v): v).collect()
Run Code Online (Sandbox Code Playgroud)

或致电values方法:

myRDD.sortByKey(ascending=True).values().collect()
Run Code Online (Sandbox Code Playgroud)

如果您参考用于创建初始RDD的结构中的值的顺序,那么在没有附加信息的情况下是不可能的.除非您明确应用转换,否则RDD是无序的sortBy.