Próbuję użyć ramek danych Spark zamiast RDD, ponieważ wydają się być bardziej zaawansowane niż RDD i mają tendencję do tworzenia bardziej czytelnego kodu, ale byłbym bardziej niż szczęśliwy, aby uzyskać sugestie dotyczące czegoś bardziej idiomatycznego dla danego zadania.Znajdź maksymalną liczbę wierszy na grupę w Spark DataFrame
W klastrze Google Dataproc z 14 węzłami mam około 6 milionów nazw przetłumaczonych na ids przez dwa różne systemy: sa
i sb
. Każdy zawiera name
,i id_sb
. Moim celem jest wygenerowanie mapowania z id_sa
do id_sb
, tak aby dla każdego id_sa
odpowiadający id_sb
był najczęstszym identyfikatorem spośród wszystkich nazw dołączonych do id_sa
.
Spróbujmy wyjaśnić na przykładzie. Jeśli mam następujące wiersze:
[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')]
Moim celem jest stworzenie mapowania z a1
do b2
. Rzeczywiście, nazwy związane z a1
są n1
, n2
i n3
, które mapują odpowiednio b1
, b2
i b2
tak b2
jest najczęstszą w mapowaniu nazwy związane z a1
. W ten sam sposób, a2
zostanie zmapowany do b2
. Można założyć, że zawsze będzie zwycięzca: nie trzeba łamać więzi.
Miałem nadzieję, że będę mógł używać groupBy(df.id_sa)
na mojej ramce danych, ale nie wiem, co robić dalej. Miałem nadzieję na agregacji, które mogłyby produkować, w końcu się następujące wiersze:
[Row(id_sa=a1, max_id_sb=b2),
Row(id_sa=a2, max_id_sb=b2)]
Ale może Próbuję użyć niewłaściwego narzędzia i należy po prostu wrócić do korzystania z RDD.
Jakie jest twoje pytanie? – eliasah
@eliasah wszelkie wskazówki (linki, przykład kodu) na temat sposobów, aby to zrobić z ramkami danych? –
Chcesz przeprowadzić grupowanie według i maksimum agregacji? – eliasah