Scala, как отсортировать «Нет» снизу, если они существуют, и выбрать первую строку в каждой группе?

Я группирую по первому элементу, что приводит к 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)]

Какова конкретная проблема, с которой вы столкнулись при его реализации?

Dima 09.04.2019 17:19

Разве первый выходной элемент не должен быть [(x, compactBuffer((x, y, p)))] ?

Yifan Guo 09.04.2019 22:15
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
72
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Возможно, вы могли бы попробовать добавить mapValue после вашего groupBy:

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

Хоть и сказано, что нельзя сравнивать два варианта, но приведенный выше код работает для меня..., или же вы можете создать преобразование A : Ordering => Ordered[A], тогда ваши варианты можно было бы сравнивать напрямую.

Другие вопросы по теме