У меня есть объект данных JSON [1], расположенный в S3, и я хочу загрузить его как PySpark DataFrame, который выглядит следующим образом [2].
Чем ближе я пытался загрузить JSON как текст с помощью PySpark, преобразовать его в строку и загрузить в Pandas [3] [4]. Задача состоит в том, как «разбить» значения, которые сами представляют собой список пар ключ / значение, в отдельные строки в кадре данных.
У кого-нибудь есть классный способ сделать это?
Спасибо за вашу помощь!
[1]
{
"1": {
"300": "foo",
"301": "bar",
"302": "foobar"
},
"3": {
"r": "t",
"f": "m"
},
"17": {
"100", "200"
}
}
[2]
----------------------
| id | some | thing |
----------------------
| 1 | 300 | foo. |
| 1 | 301 | bar. |
| 1 | 302 | foobar |
| 3 | r | t |
| 3 | f | m |
| 17 | 100 | 200 |
----------------------
[3]
data_s3 = "s3://my-bucket/data.json"
json_spark_text = spark.read.text(data_s3).collect())
json_string = "".join(map(lambda x: x.value, json_spark_text))
import pandas as pd
df = pd.read_json(json_string, orient='index')
[4]
0
-------------------------------------------------------
| 1 | {u'300':u'foo',u'301':u'bar',u'302':u'foobar'} |
| 3 | {u'r':u't',u'f':u'm'} |
| 17 | {u'100',u'200'} |
-------------------------------------------------------