如果存在,Scala如何将“None”排序到底部并选择每个组中的第一行?

问题描述 投票:0回答:1

我按照导致RDD[(String, Iterable[(String, String, Option[Node])])]的第一个元素进行分组。

我想按Option[Node]排序,如果它有NoneNone应该在每组中排序到底部并选择每组的第一行。

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)]
java scala sorting apache-spark group-by
1个回答
1
投票

您可以尝试在groupBy之后附加mapValue:

rdd.groupBy([Your Key]).mapValues(_.sortBy(_._3).reverse.take(1)).values

虽然据说你无法比较两个选项,但上面的代码对我有用......或者你可以创建A : Ordering => Ordered[A]的转换,那么你的选项可以直接比较。

© www.soinside.com 2019 - 2024. All rights reserved.