我按照导致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]
的转换,那么你的选项可以直接比较。