我按导致RDD[(String, Iterable[(String, String, Option[Node])])]
的第一个元素分组。
我想按Option[Node]
排序,如果它具有None
,则None
应该在每个组的底部排序,并为每个组选择第一行。
I have
[(x,compactBuffer((x,y,z),(x,y,None),(x,y,p))],
[(a,compactBuffer((a,b,c),(a,b,d))],
[(s,compactBuffer((s,t,None),(s,t,None),(s,t,u))],
[(l,compactBuffer((l,m,None)]
预期产量
[(x,compactBuffer((x,y,z))],
[(a,compactBuffer((a,b,c))],
[(s,compactBuffer((s,t,u))], // select (s,t,u) since the first two rows
have None
[(l,compactBuffer((l,m,None)]
最佳答案
您可以尝试在groupBy之后附加mapValue:
rdd.groupBy([Your Key]).mapValues(_.sortBy(_._3).reverse.take(1)).values
即使据说您不能比较两个选项,但是上面的代码对我有用...,否则您可以创建
A : Ordering => Ordered[A]
的转换,则可以直接比较您的选项。