【问题标题】:Sorting values of an array type in RDD using pySpark使用 pySpark 在 RDD 中对数组类型的值进行排序
【发布时间】:2021-12-16 10:06:16
【问题描述】:

我有一个包含如下值的 RDD:

[
   (Key1, ([2,1,4,3,5],5)),
   (Key2, ([6,4,3,5,2],5)),
   (Key3, ([14,12,13,10,15],5)),
]

我需要像这样对数组部分的值进行排序:

[
   (Key1, ([1,2,3,4,5],5)),
   (Key2, ([2,3,4,5,6],5)),
   (Key3, ([10,12,13,14,15],5)),
]

我为 Spark 找到了两种排序方法:sortBysortbyKey。我尝试了这样的sortBy 方法:

myRDD.sortBy(lambda x: x[1][0])

但不幸的是,它根据数组的第一个元素对数据进行排序,而不是对数组本身的元素进行排序。

另外,sortByKey 似乎无济于事,因为它只是根据键对数据进行排序。

如何实现排序的RDD?

【问题讨论】:

    标签: apache-spark sorting pyspark rdd


    【解决方案1】:

    试试这样的:

    rdd2 = rdd.map(lambda x: (x[0], sorted(x[1]), x[2]  ))
    

    【讨论】:

    • 据我所知,sorted() 是一个 python 函数。那么这个排序过程是分布式的吗?如果我们可以使用这些功能,我也可以使用 NumPy 排序功能,那么在性能方面哪个更好? @thebluephantom
    • 你没有排序分布在这里。只是 rdd 中的一个数组作为元素。
    • 那么如何以分布式方式对数组的元素进行排序呢? @thebluephantom
    • 这里是一个狭窄的转换,所以它默认是分布式的。请相信我。你不排序 rdd 只是 rdd 的一个元素。
    猜你喜欢
    • 1970-01-01
    • 2017-08-12
    • 1970-01-01
    • 1970-01-01
    • 2018-05-12
    • 1970-01-01
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多