【问题标题】:How to sort by value efficiently in PySpark?如何在 PySpark 中有效地按值排序?
【发布时间】:2016-02-15 20:11:29
【问题描述】:

我想按 V 对我的 K,V 元组进行排序,即按值。我知道TakeOrdered 很适合这个,如果你知道你需要多少:

b = sc.parallelize([('t',3),('b',4),('c',1)])

使用TakeOrdered:

b.takeOrdered(3,lambda atuple: atuple[1])

使用Lambda

b.map(lambda aTuple: (aTuple[1], aTuple[0])).sortByKey().map(
    lambda aTuple: (aTuple[0], aTuple[1])).collect()

我查看了here 的问题,这表明后者。我很难相信takeOrdered 如此简洁,但它需要与Lambda 解决方案相同数量的操作。

有谁知道 spark 中按值排序的更简单、更简洁的转换?

【问题讨论】:

    标签: python sorting lambda apache-spark


    【解决方案1】:

    我觉得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)]
    

    实际上是not more efficient at all,因为它涉及按值键入、按键排序、然后获取值,但它看起来比后一种解决方案更漂亮。在效率方面,我认为您不会找到更有效的解决方案,因为您需要一种方法来转换数据,使值成为您的键(然后最终将该数据转换回原始模式)。

    【讨论】:

      【解决方案2】:

      只是想添加这个提示..这对我有很大帮助

      升序:

      bSorted = b.sortBy(lambda a: a[1])
      

      降序:

      bSorted = b.sortBy(lambda a: -a[1])
      

      【讨论】:

        猜你喜欢
        • 2023-03-17
        • 1970-01-01
        • 1970-01-01
        • 2019-08-02
        • 1970-01-01
        • 2020-02-19
        • 1970-01-01
        • 1970-01-01
        • 2022-01-06
        相关资源
        最近更新 更多