Я пытаюсь использовать Spark dataframes вместо RDD, поскольку они выглядят более высокоуровневыми, чем RDD, и имеют тенденцию создавать более читаемый код.
В 14-узловой группе Google Dataproc у меня есть около 6 миллионов имен, которые переведены на идентификаторы двумя разными системами: sa
и sb
. Каждая Row
содержит name
, id_sa
и id_sb
. Моя цель - создать сопоставление от id_sa
к id_sb
, так что для каждого id_sa
соответствующий id_sb
является самым частым идентификатором среди всех имен, прикрепленных к id_sa
.
Попробуем пояснить пример. Если у меня есть следующие строки:
[Row(name='n1', id_sa='a1', id_sb='b1'),
Row(name='n2', id_sa='a1', id_sb='b2'),
Row(name='n3', id_sa='a1', id_sb='b2'),
Row(name='n4', id_sa='a2', id_sb='b2')]
Моя цель - создать сопоставление от a1
до b2
. Действительно, имена, связанные с a1
- n1
, n2
и n3
, которые сопоставляются соответственно с b1
, b2
и b2
, поэтому b2
является наиболее частым отображением в именах, связанных с a1
. Точно так же a2
будет отображаться на b2
. Это нормально предположить, что всегда будет победитель: нет необходимости разорвать связи.
Я надеялся, что я могу использовать groupBy(df.id_sa)
на моем фреймворке данных, но я не знаю, что делать дальше. Я надеялся на агрегацию, которая в конечном итоге могла бы произвести следующие строки:
[Row(id_sa=a1, max_id_sb=b2),
Row(id_sa=a2, max_id_sb=b2)]
Но, возможно, я пытаюсь использовать неправильный инструмент, и я должен просто вернуться к использованию RDD.