Как преобразовать комплекс JSON в датафрейм с помощью PySpark? - PullRequest
0 голосов
/ 23 апреля 2020

Мне требуется код python для преобразования JSON в формат данных.

Мой JSON формат

{"feed":{"catalog":{"schema":["somekey":"somevalue"], "add":{"items":[{["somekey":"somevalue"]}]}}....

Я хочу JSON в несколько кадров данных, которые присутствуют внутри предметов.

Например:

Вход JSON

{"feed":{"catalog":{"schema":["somekey":"somevalue"], "add":{"items":[{[{"sku":"10002","status":"Enabled"},{"sku":"10003","status":"Enabled"}]}]}}

Ожидается Dataframe

sku      status

100002   Enabled

1000023  Enabled

Заранее спасибо, пожалуйста, помогите решить проблему.

1 Ответ

1 голос
/ 23 апреля 2020

Вам нужно взорвать массив items, чтобы получить sku,status столбцы.

#sample valid json
jsn='{"feed":{"catalog":{"schema":["somekey","somevalue"], "add":{"items":[{"sku":"10002","status":"Enabled"},{"sku":"10003","status":"Enabled"}]}}}}'

#read the json using spark.read.json
df=spark.read.json(sc.parallelize([jsn]))

#print schema
df.printSchema()
#root
# |-- feed: struct (nullable = true)
# |    |-- catalog: struct (nullable = true)
# |    |    |-- add: struct (nullable = true)
# |    |    |    |-- items: array (nullable = true)
# |    |    |    |    |-- element: struct (containsNull = true)
# |    |    |    |    |    |-- sku: string (nullable = true)
# |    |    |    |    |    |-- status: string (nullable = true)
# |    |    |-- schema: array (nullable = true)
# |    |    |    |-- element: string (containsNull = true)

df.withColumn("items",explode(col("feed.catalog.add.items"))).\
select("items.*").\
show()
#+-----+-------+
#|  sku| status|
#+-----+-------+
#|10002|Enabled|
#|10003|Enabled|
#+-----+-------+
...