Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Scala如何将“无”排序到底部(如果存在)并选择每组中的第一行?_Java_Scala_Sorting_Apache Spark_Group By - Fatal编程技术网

Java Scala如何将“无”排序到底部(如果存在)并选择每组中的第一行?

Java Scala如何将“无”排序到底部(如果存在)并选择每组中的第一行?,java,scala,sorting,apache-spark,group-by,Java,Scala,Sorting,Apache Spark,Group By,我按照第一个元素进行分组,该元素产生RDD[String,Iterable[String,String,Option[Node]] 我想按选项[Node]进行排序,如果没有,则应在每个组的底部排序,并为每个组选择第一行 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

我按照第一个元素进行分组,该元素产生RDD[String,Iterable[String,String,Option[Node]]

我想按选项[Node]进行排序,如果没有,则应在每个组的底部排序,并为每个组选择第一行

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]的转换,那么你的选项可以直接进行比较。

实现它的具体问题是什么?第一个输出元素不应该是[x,compactBufferx,y,p]?