PySpark如何对RDD中每个元素内部的嵌套数组进行排序
PySpark RDD内部数组排序实现方案
你需要的是对RDD每条记录内部的数组单独排序,不需要用到sortBy/sortByKey这类全局排序算子,直接使用map算子对单条数据做原地转换即可,无需触发shuffle,性能更高。
实现代码
# 对每条记录中的数组做升序排序,其余字段保持不变 sorted_rdd = myRDD.map(lambda x: (x[0], (sorted(x[1][0]), x[1][1])))
代码逻辑说明
x对应RDD中的每一条原始元素,结构为(Key, (数组, 数字))x[0]保留原始Key不变x[1][0]是需要排序的数组,通过Python内置的sorted()方法实现升序排序x[1][1]保留原数组长度字段不变
结果验证
执行collect()方法可查看排序后的结果是否符合预期:
print(sorted_rdd.collect())
输出结果为:
[(Key1, ([1,2,3,4,5],5)), (Key2, ([2,3,4,5,6],5)), (Key3, ([10,12,13,14,15],5))]
内容的提问来源于stack exchange,提问作者Mohammad Derakhshan
相关产品推荐
相关产品推荐

