2017-07-03 55 views
0

我有一个RDD [(中间体,阵列(双))]等排序RDD根据在一个列中的不同的值

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) 

我想根据在第一列中的唯一值的RDD进行排序( 1,5,2)

所需输出

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,5,2) 
+0

这是你的全部数据集?你会不会总是有这3个数字,即'(1,5,2)'? – philantrovert

+0

编号数据集变化可能有不同的值(1,5,2,3,8,..)。想要安排在这个不同的顺序的数据 –

回答

1

你可以先定义排序为您例如:

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

,然后应用它:

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

不给出OP想要的输出。 – philantrovert

+0

对不起,没有正确阅读!我已经更新了我的答案,他们想要什么:-) –

+0

很棒,upvoted。 – philantrovert

相关问题