如何在没有一致架构的情况下将JSON对象从S3加载到PySpark DataFrame

时间:2019-04-07 19:30:37

标签: python json dataframe pyspark

我在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'}                                |
-------------------------------------------------------

0 个答案:

没有答案