PySpark - sortByKey() 方法以原始顺序从 k,v 对中 return 值
PySpark - sortByKey() method to return values from k,v pairs in their original order
我需要能够 return 来自 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]
我的解决方法:
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]
谢谢!
如果 "original order" 你的意思是键的顺序那么你所要做的就是在排序后添加映射:
myRDD.sortByKey(ascending=True).map(lambda (k, v): v).collect()
或调用values
方法:
myRDD.sortByKey(ascending=True).values().collect()
如果您参考用于创建初始 RDD 的结构中值的顺序,那么没有故事附加信息是不可能的。 RDD 是无序的,除非您显式应用 sortBy
.
之类的转换
我需要能够 return 来自 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]
我的解决方法:
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]
谢谢!
如果 "original order" 你的意思是键的顺序那么你所要做的就是在排序后添加映射:
myRDD.sortByKey(ascending=True).map(lambda (k, v): v).collect()
或调用values
方法:
myRDD.sortByKey(ascending=True).values().collect()
如果您参考用于创建初始 RDD 的结构中值的顺序,那么没有故事附加信息是不可能的。 RDD 是无序的,除非您显式应用 sortBy
.