Как сгладить столбец в DataFrame - PullRequest
0 голосов
/ 05 февраля 2019

Для данного кадра данных в этом формате:

{
    "field1": "value1",
    "field2": "value2",
    "elements": [{
        "id": "1",
        "name": "a"
    },
    {
        "id": "2",
        "name": "b"
    },
    {
        "id": "3",
        "name": "c"
    }]
}

Мы можем сгладить столбцы следующим образом:

val exploded = df.withColumn("elements", explode($"elements"))
exploded.show()
 >> +--------+------+------+
 >> |elements|field1|field2|
 >> +--------+------+------+
 >> |   [1,a]|value1|value2|
 >> |   [2,b]|value1|value2|
 >> |   [3,c]|value1|value2|
 >> +--------+------+------+
val flattened = exploded.select("elements.*", "field1", "field2")
flattened.show()
 >> +---+----+------+------+
 >> | id|name|field1|field2|
 >> +---+----+------+------+
 >> |  1|   a|value1|value2|
 >> |  2|   b|value1|value2|
 >> |  3|   c|value1|value2|
 >> +---+----+------+------+

Есть ли способ получить сглаженный кадр данных без явного указания оставшихсястолбцы?Примерно так (хотя это не работает)?

val flattened = exploded.select("elements.*", "*")

1 Ответ

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

да, вы можете запросить столбцы exploded, а затем выбрать все, кроме elements:

import org.apache.spark.sql.functions.col

val colsToSelect = exploded.columns.filterNot(c => c == "elements").map(col)

val flattened = exploded.select(($"elements.*" +:colsToSelect):_*)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...