Собрать данные столбца DataFrame в Json - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть DataFrame с двумя столбцами в качестве «ключа»: id1 и id2:

val df1 = Seq(
  (1, 11, "n1", "d1"),
  (1, 22, "n2", "d2"),
  (2, 11, "n3", "d3"),
  (2, 11, "n4", "d4")
).toDF("id1", "id2", "number", "data")

scala> df1.show
+---+---+------+----+
|id1|id2|number|data|
+---+---+------+----+
|  1| 11|    n1|  d1|
|  1| 22|    n2|  d2|
|  2| 11|    n3|  d3|
|  2| 11|    n4|  d4|
+---+---+------+----+

Я хочу получить Json, сгруппированный по ключам кадра данных, например:

+---+---+-------+----------------------------------------------------------+
|id1|id2| json                                                             |
+---+---+-------+----------------------------------------------------------+
|  1| 11|[{"number" : "n1", "data": "d1"}]                                 |
|  1| 22|[{"number" : "n2", "data": "d2"}]                                 |
|  2| 11|[{"number" : "n3", "data": "d3"}, {"number" : "n4", "data": "d4"}]|
+---+---+-------+----------------------------------------------------------+

Версии:

Spark: 2.2
Scala: 2.11

1 Ответ

0 голосов
/ 13 февраля 2019

Это можно сделать, используя сначала to_json для преобразования столбцов number и data в формат json.Затем используйте groupBy с collect_list в двух столбцах идентификатора, чтобы получить желаемый результат.

val df2 = df1.withColumn("json", to_json(struct($"number", $"data")))
  .groupBy("id1", "id2").agg(collect_list($"json"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...