У меня есть следующий 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]
и другие кадры данных для каждой строки, содержащей словари. Но без успеха (и он не имеет хороших результатов).
Большое вам спасибо!