我在S3中有一个数据JSON对象[1],我想将其作为一个看起来像[2]的PySpark DataFrame加载。
我越接近尝试通过PySpark将JSON加载为文本,将其转换为字符串并将其加载到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'} |
-------------------------------------------------------