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

Posted

技术标签:

【中文标题】PySpark - sortByKey() 方法以原始顺序从 k,v 对返回值【英文标题】:PySpark - sortByKey() method to return values from k,v pairs in their original order 【发布时间】:2015-06-28 20:36:06 【问题描述】:

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

我在下面提供了我的解决方法,但我希望能够一次性完成所有操作。

类似:

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]

谢谢!

【问题讨论】:

【参考方案1】:

如果“原始顺序”是指键的顺序,那么您所要做的就是在排序后添加地图:

myRDD.sortByKey(ascending=True).map(lambda (k, v): v).collect()

或者调用values方法:

myRDD.sortByKey(ascending=True).values().collect()

如果您参考用于创建初始 RDD 的结构中的值的顺序,那么如果不记录附加信息是不可能的。 RDD 是无序的,除非您明确应用 sortBy 之类的转换。

【讨论】:

谢谢,都成功了!我选择了 l 值方法。

以上是关于PySpark - sortByKey() 方法以原始顺序从 k,v 对返回值的主要内容,如果未能解决你的问题,请参考以下文章

apache spark中的sortbykey

spark常用转换操作:sortByKey()和sortBy()

Spark 使用sortByKey进行二次排序

[Spark][Python]sortByKey 例子

spark中的sortByKey(false)啥意思。那true呢?

如何在 Apache Spark 上对整数列表进行排序?