PySpark - получение списка dicts и преобразование его ключей / значений в столбцы - PullRequest
1 голос
/ 06 апреля 2019

У меня есть следующий json (расположенный в моей локальной файловой системе в path_json):

[
    {
        "name": "John",
        "email": "john@hisemail.com",
        "gender": "Male",
        "dict_of_columns": [
            {
                "column_name": "hobbie",
                "columns_value": "guitar"
            },
            {
                "column_name": "book",
                "columns_value": "1984"
            }
        ]
    },
    {
        "name": "Mary",
        "email": "mary@heremail.com",
        "gender": "Female",
        "dict_of_columns": [
            {
                "column_name": "language",
                "columns_value": "Python"
            },
            {
                "column_name": "job",
                "columns_value": "analyst"
            }
        ]
    }
]

Как видите, это вложенный json. Я читаю это с помощью следующей команды:

df = spark.read.option("multiline", "true").json(path_json)

Ok. Теперь он производит мне следующий DataFrame:

+------------------------------------+-------------------+------+----+
|dict_of_columns                     |email              |gender|name|
+------------------------------------+-------------------+------+----+
|[[hobbie, guitar], [book, 1984]]    |john@hisemail.com  |Male  |John|
|[[language, Python], [job, analyst]]|mary@heremail.com  |Female|Mary|
+------------------------------------+-------------------+------+----+

Я хочу знать, есть ли способ создать следующий фрейм данных:

+----+-----------------+------+------+-------+--------+----+
|book|email            |gender|hobbie|job    |language|name|
+----+-----------------+------+------+-------+--------+----+
|1984|john@hisemail.com|Male  |guitar|null   |null    |John|
|null|mary@heremail.com|Female|null  |analyst|Python  |Mary|
+----+-----------------+------+------+-------+--------+----+

Несколько комментариев:

  • В моих реальных данных тысячи и тысячи строк
  • Я не знаю всех column_name в моем наборе данных (их много)
  • email уникален для каждой строки, поэтому его можно использовать в качестве ключа, если необходимо объединение. Я пробовал этот подход раньше: создать основной кадр данных со столбцами [name,gender,email] и другие кадры данных для каждой строки, содержащей словари. Но без успеха (и он не имеет хороших результатов).

Большое вам спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...