Spark Dataframe Pivot без агрегата - PullRequest
1 голос
/ 08 ноября 2019

У меня есть пакет документов json, который соответствует изменению базы данных .. который похож на этот формат:

{
    "key": "abc",
    "timestamp": 1573085110000,
    "cols": [{
            "name": "COL1",
            "value": "14",
        }, {
            "name": "COL2",
            "value": "Some Text",
        }
    ]
}

Загрузка этого файла в искровой фрейм приводит к:

+---+-------------+--------------------+
|key|    timestamp|                cols|
+---+-------------+--------------------+
|abc|1573084821000|[[COL1, 14], [COL...|
|def|1573171513000|[[COL1, xx], [COL...|
|   |             |                    |
+---+-------------+--------------------+

Я взорвал массив cols, так что теперь имена столбцов БД находятся в строках, urgh

+---+----+---------+
|key|name|    value|
+---+----+---------+
|abc|COL1|       14|
|abc|COL2|Some Text|
|   |    |         |
+---+----+---------+

Теперь, я понял, вот так .., поэтому я начал писать:

dt.groupBy($"key").pivot("name").agg($"value")

В этот момент, очевидно, я понял, что spark не допускает агрегации на нечисловых столбцах ..

по сути, учитывая раздражающий способ определения данных в json ... есть ли лучший способдобиться этого:

+---+----+---------+
|key|COL1|     COL2|
+---+----+---------+
|abc|14  |Some Text|
|   |    |         |
+---+----+---------+

нужно отправиться домой, был долгий день .. вероятно, упустил что-то очевидное, та!

1 Ответ

1 голос
/ 08 ноября 2019

не через 5 минут после публикации я понял это ..

dt.groupBy($"key").pivot($"name").agg(first($"value"))

??

...