Агрегирование в последовательность - PullRequest
0 голосов
/ 15 октября 2018

Предположим, у меня есть org.apache.spark.sql.DataFrame с этой схемой:

root
 |-- origin: string (nullable = true)
 |-- destination: string (nullable = true)

Предположим, что типичный экземпляр этого DataFrame выглядит примерно так:

+------------------------------+--------------------------------------+
|origin                        |destination                           |
+------------------------------+--------------------------------------+
|JEBEL ALI                     |KUWAIT                                |
|CHITTAGONG                    |KEARNY POINT                          |
|FELIXSTOWE                    |KEARNY POINT                          |
|LOS ANGELES                   |EUROPOORT - E.C.T. DELTA TERMINAL     |
|LOS ANGELES                   |KAOHSIUNG                             |
|GREATER NEW YORK TERMINAL     |ANTWERP                               |
|SHANGHAI                      |LOS ANGELES                           |
|SAN PEDRO                     |BRANI TERMINAL - PULAU BRANI          |
|KAMPONG SAOM                  |HOWLAND HOOK CONTAINER TERMINAL       |
|SHANGHAI                      |LONG BEACH                            |
|BARCELONA                     |MONTREAL                              |
|HAIFA                         |GREATER NEW YORK TERMINAL             |
|BRANI TERMINAL - PULAU BRANI  |BUSAN                                 |
|MUMBAI                        |KEARNY POINT                          |
|LAEM CHABANG                  |CAT LAI OIL TERMINAL - HO CHI MIN CITY|
|BARCELONA                     |JAWAHARLAL NEHRU PORT                 |
|HUANG DAO - OIL TERMINAL NO. 2|VANCOUVER, B.C.                       |
|HAIFA                         |HALIFAX                               |
|BRANI TERMINAL - PULAU BRANI  |LOS ANGELES                           |
|MANILA                        |VANCOUVER, B.C.                       |
+------------------------------+--------------------------------------+  

Я хочу преобразовать это вa DataFrame, подобный этому:

+------------------------------+---------------------------------------------------+
|origin                        |destinations                                       |
+------------------------------+---------------------------------------------------+
|JEBEL ALI                     |[KUWAIT]                                           |
|CHITTAGONG                    |[KEARNY POINT]                                     |
|FELIXSTOWE                    |[KEARNY POINT]                                     |
|LOS ANGELES                   |[EUROPOORT - E.C.T. DELTA TERMINAL, KAOHSIUNG]     |
|GREATER NEW YORK TERMINAL     |[ANTWERP]                                          |
|SHANGHAI                      |[LOS ANGELES, [LONG BEACH]                         |
|SAN PEDRO                     |BRANI TERMINAL - PULAU BRANI                       |
|KAMPONG SAOM                  |HOWLAND HOOK CONTAINER TERMINAL                    |
|BARCELONA                     |[MONTREAL, JAWAHARLAL NEHRU PORT]                  |
|HAIFA                         |[GREATER NEW YORK TERMINAL, HALIFAX]               |
|BRANI TERMINAL - PULAU BRANI  |[BUSAN, LOS ANGELES]                               |
|MUMBAI                        |KEARNY POINT                                       |
|LAEM CHABANG                  |CAT LAI OIL TERMINAL - HO CHI MIN CITY             |
|HUANG DAO - OIL TERMINAL NO. 2|VANCOUVER, B.C.                                    |
|MANILA                        |VANCOUVER, B.C.                                    |
+------------------------------+---------------------------------------------------+  

Обратите внимание, что каждое значение origin уникально и показывает все пункты назначения, связанные с этим источником.Тип destinations - это Seq [String].

Как мне это сделать?

1 Ответ

0 голосов
/ 15 октября 2018
val originToDestinations = originDestinationDf.groupBy("origin").agg(collect_set("destination"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...