Как превратить кадр данных из двух столбцов, где каждая строка представляет идентификатор пары друзей, в данные с идентификатором и всеми их друзьями в одной строке? - PullRequest
0 голосов
/ 13 февраля 2020

Пример данных:

col1 col2

id1   id2
id2   id3
id1   id4
id3   id4

Выход:

col1 col2

id1  id2, id4
id2  id1, id3
id3  id2
id4  id1, id3

Ответы [ 2 ]

0 голосов
/ 14 февраля 2020

Другая идея состоит в том, чтобы собрать в список и после применить scala mkString. Итак, первый запрос -

select col1, collect_list(col2) as c from test group by col1
0 голосов
/ 13 февраля 2020
    val df = List(("id1", "id2"),
    ("id2", "id3"),
    ("id1", "id4"),
    ("id3", "id4")
  ).toDF("col1", "col2")


 df.groupBy('col1).agg(array_join(collect_set('col2), ",").as("col2"))
    .union(
      df.groupBy('col2).agg(array_join(collect_set('col1), ",").as("col2"))
    )
    .groupBy('col1).agg(array_join(collect_set('col2), ",").as("col2")).show()

вывод:

+----+-------+
|col1|   col2|
+----+-------+
| id3|id2,id4|
| id1|id2,id4|
| id2|id1,id3|
| id4|id1,id3|
+----+-------+

Надеюсь, это поможет ..

...