如何将JSON对象列表转换为PySpark数据框?

bxfogqkk  于 2023-02-03  发布在  Spark
关注(0)|答案(1)|浏览(192)

我想将变量中的JSON字符串转换为Databricks上的PySpark DataFrame。
我有一个来自API的有效负载。它是一个名为response_list的变量上的JSON对象列表。该变量是类型为class 'str'>的JSON对象:

[{"sentiment":"neutral","sentiment_confidence_score":0.8585},{"sentiment":"neutral","sentiment_confidence_score":0.7861}]

我尝试将其解析为PySpark Dataframe ,这样每个对象都是一行。
| Spark柱|
| - ------|
| {"情绪":"中性","情绪_信心_分数":0.8585}|
| {"情绪":"中性","情绪_信心_分数":0.7861}|
我尝试的是:

dfJson = sc.parallelize(response_list).map(lambda x: json.dumps(x))
dfJson = spark.read.json(dfJson)
dfJson.show(truncate = False)

它给了我一个缺少参数的错误:

File "<command-3646528696964905>", line 79, in json_parse
    dfJson = sc.parallelize(response_list).map(lambda x: json.dumps(x))
TypeError: parallelize() missing 1 required positional argument: 'c'

我已经花了将近一整天的时间在这上面。当我把JSON列表复制粘贴到一个JSON验证器中时,它说,这个JSON是有效的。所以我假设格式是正确的。但是我不知道如何把它转换成 Dataframe 。

fhg3lkii

fhg3lkii1#

好吧,这就像回答我自己的问题一样。但是我最终解决了它。如果版主认为合适的话,他们可以删除这个问题。我把json字符串解析成一个字典列表。然后我用字典列表创建了一个Spark数据框架。我相信有更有效的方法来做这件事。但是现在这个方法有效。

# empty list to store dict items
list_of_dicts = []
        
response_list_dumped = json.loads(response_list)
for d in response_list_dumped:
    list_of_dicts.append(d)
        
ResponseDF = spark.createDataFrame(list_of_dicts)

输出如下所示:

|sentiment|sentiment_confidence_score|
|negative |0.9065                    |
|neutral  |0.6207                    |
|positive |0.6734                    |
|positive |0.5663                    |
|neutral  |0.8788                    |
|neutral  |0.9155                    |
|neutral  |0.5019                    |
|negative |0.6617                    |
|neutral  |0.69                      |
|neutral  |0.8335                    |

相关问题