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

09-09 18:28