Я группирую по первому элементу, что приводит к 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)]
Разве первый выходной элемент не должен быть [(x, compactBuffer((x, y, p)))]
?
Возможно, вы могли бы попробовать добавить mapValue после вашего groupBy:
rdd.groupBy([Your Key]).mapValues(_.sortBy(_._3).reverse.take(1)).values
Хоть и сказано, что нельзя сравнивать два варианта, но приведенный выше код работает для меня..., или же вы можете создать преобразование A : Ordering => Ordered[A]
, тогда ваши варианты можно было бы сравнивать напрямую.
Какова конкретная проблема, с которой вы столкнулись при его реализации?