根据列

时间:2017-07-03 12:38:07

标签: scala sorting apache-spark rdd

我有一个RDD [(Int,Array(Double))]和

一样
1, Array(2.0,5.0,6.3) 
5, Array(1.0,3.3,9.5)
1, Array(5.0,4.2,3.1)
2, Array(9.6,6.3,2.3)
1, Array(8.5,2.5,1.2)
5, Array(6.0,2.4,7.8)
2, Array(7.8,9.1,4.2)

我想根据第1列(1,5,2)

中的Distinct值对RDD进行排序

必需的输出

1, Array(2.0,5.0,6.3)
1, Array(5.0,4.2,3.1)
1, Array(8.5,2.5,1.2)
5, Array(1.0,3.3,9.5)
5, Array(6.0,2.4,7.8)
2, Array(9.6,6.3,2.3)
2, Array(7.8,9.1,4.2)

我尝试过像

这样的命令
rdd.groupby()
rdd.sortby()

所有这一切都会产生带有排序列表的输出,如

1, Array(2.0,5.0,6.3)
1, Array(5.0,4.2,3.1)
1, Array(8.5,2.5,1.2)
2, Array(9.6,6.3,2.3)
2, Array(7.8,9.1,4.2)
5, Array(1.0,3.3,9.5)
5, Array(6.0,2.4,7.8)

如何使用不同的值对RDD进行排序,在第1列中按

排序
(1,5,2) 

1 个答案:

答案 0 :(得分:1)

您可以先在示例中定义您的订购:

val ordering = (1,5,2).productIterator.toList.zipWithIndex.toMap

然后应用它:

rdd.sortBy{case (k,v) => ordering(k)}