如何在Databricks中将JSON对象列表转换为PySpark DataFrame
问题
在Databricks中需将字符串类型的JSON列表转换为PySpark DataFrame。现有变量response_list为字符串类型,内容如下:
[{"sentiment":"neutral","sentiment_confidence_score":0.8585},{"sentiment":"neutral","sentiment_confidence_score":0.7861}]
期望输出的DataFrame每行对应一个JSON对象,格式如下:
| pyspark_column |
|---|
| {"sentiment":"neutral","sentiment_confidence_score":0.8585} |
| {"sentiment":"neutral","sentiment_confidence_score":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格式经验证有效,但转换失败。
解决方案
错误原因
response_list是字符串类型的JSON数组,直接用sc.parallelize()会把字符串拆成单个字符的列表,完全不符合需求。- 错误提示的参数缺失问题,大概率是未正确引用SparkContext(Databricks中需用
spark.sparkContext而非未定义的sc)。
正确转换方法
方法1:生成包含原始JSON字符串的DataFrame
按需求保留每行原始JSON字符串:
import json # 把JSON字符串解析为Python字典列表 parsed_data = json.loads(response_list) # 将每个字典转回JSON字符串,生成新列表 json_str_list = [json.dumps(item) for item in parsed_data] # 创建DataFrame并指定列名 df = spark.createDataFrame(json_str_list, "string").toDF("pyspark_column") df.show(truncate=False)
方法2:解析为结构化DataFrame(拆分字段)
如果需要将JSON的字段拆分为单独列,可直接生成结构化表:
import json parsed_data = json.loads(response_list) df = spark.createDataFrame(parsed_data) df.show(truncate=False)
输出结果:
+--------+-------------------------+ |sentiment|sentiment_confidence_score| +--------+-------------------------+ |neutral |0.8585 | |neutral |0.7861 | +--------+-------------------------+
内容的提问来源于stack exchange,提问作者mmustafaicer
相关产品推荐
相关产品推荐

