/// Generate data
val rdd = sc.parallelize(Seq(("ABC","G4"),("ABC","G3"),
("ABC","G1"),("FFF","G5"),
("FFF","G4"),("FFF","G3"),
("CDE","G5"),("CDE","G4"),
("CDE","G3"),("CDE","G2"),
("XYZ","G4"),("XYZ","G3")))
/// Put values in a list and calculate its size
val rdd_new = rdd.groupByKey.mapValues(_.toList).map(x => (x._1, x._2, x._2.size))
/// Now this works
rdd_new.sortBy(r => (r._3, r._2(0)), false).collect()
/// Array[(String, List[String], Int)] = Array((CDE,List(G5, G4, G3, G2),4), (FFF,List(G5, G4, G3),3), (ABC,List(G4, G3, G1),3), (XYZ,List(G4, G3),2))
2条答案
按热度按时间ifmq2ha21#
我不知道为什么上面的答案不起作用。我觉得很好。试试这个代码。
以下是我的意见:
代码:
这是订单号:
soat7uwm2#
你可以用
sortBy
:在上面,
r._3
代表最后一列,r._2(0)
对于第二列(数组)的第一个元素false
指定顺序应为降序。但是请记住,由于洗牌,排序是一个昂贵的操作。更新
如果我们假设你从一个
pair rdd
: