Hun*_*nle 7 python sorting lambda apache-spark
我想用V对V,V元组进行排序,即按值排序.TakeOrdered
如果你知道你需要多少,我知道这对你有好处:
b = sc.parallelize([('t',3),('b',4),('c',1)])
Run Code Online (Sandbox Code Playgroud)
运用 TakeOrdered:
b.takeOrdered(3,lambda atuple: atuple[1])
Run Code Online (Sandbox Code Playgroud)
运用 Lambda
b.map(lambda aTuple: (aTuple[1], aTuple[0])).sortByKey().map(
lambda aTuple: (aTuple[0], aTuple[1])).collect()
Run Code Online (Sandbox Code Playgroud)
我在这里查看了这个问题,这表明后者.我发现很难相信它takeOrdered
是如此简洁,但它需要与Lambda
解决方案相同的操作数量.
有没有人知道更简单,更简洁的火花转换按值排序?
Roh*_*tty 15
我认为sortBy()
更简洁:
b = sc.parallelize([('t', 3),('b', 4),('c', 1)])
bSorted = b.sortBy(lambda a: a[1])
bSorted.collect()
...
[('c', 1),('t', 3),('b', 4)]
Run Code Online (Sandbox Code Playgroud)
它实际上并没有更高效,因为它涉及键值键入,按键排序,然后抓取值但它看起来比后一个解决方案更漂亮.在效率方面,我认为您不会找到更有效的解决方案,因为您需要一种方法来转换数据,使得值将成为您的密钥(然后最终将该数据转换回原始模式).
归档时间: |
|
查看次数: |
30857 次 |
最近记录: |