python - RDD.sortByKey 在 python 中使用函数?

标签 python scala sorting apache-spark

假设我的键不是简单数据类型而是类,我需要使用比较函数对键进行排序。在 Scala 中,我可以通过使用 new Ordering 来做到这一点。如何在 Python 中实现相同的功能?例如,Python 中的等效代码是什么?

implicit val someClassOrdering = new Ordering[SomeClass] {
        override def compare(a: SomeClass, b: SomeClass) = a.compare(b)
    }

最佳答案

你可以传递keyfunc参数:

from numpy.random import seed, randint
from collections import namedtuple

Point = namedtuple('Point', ['x', 'y'])

seed(1)
rdd = sc.parallelize(
    (Point(randint(10), randint(10)), randint(100)) for _ in range(5))

现在,假设您想按 y 坐标对点进行排序:

rdd.sortByKey(keyfunc=lambda p: p.y).collect()

结果是:

[(Point(x=5, y=0), 16),
 (Point(x=9, y=2), 20),
 (Point(x=5, y=2), 84),
 (Point(x=1, y=7), 6),
 (Point(x=5, y=8), 9)]

关于python - RDD.sortByKey 在 python 中使用函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31187844/

相关文章:

python - 仅在 Django 管理面板中多选下拉列表/列表

scala - Apache-Spark Graph-frame 在 BFS 上非常慢

scala - 在到达第一个None时如何停止构建Option [Collection]?

ruby - 在 Ruby 中对字符串数组进行排序

python - 从 pandas Dataframe 列创建列表的高效/Pythonic 方法

python - 用 Hy 中的索引替换列表/字典元素

python - Gunicorn:尝试启动 Flask 服务器时无法在 'app' 中找到属性 'wsgi'

Java/Scala Kafka Producer 不向主题发送消息

javascript - 根据字符串对 float 进行排序?

java - 使用实现 Comparator 作为参数的类时出现问题