我是 pyspark 的新手,我有一个来自 api 的 json 列表,每个 json 对象都有相同的架构(键值对)。像这样
[ {'count': 308,
'next': 'some_url',
'previous': None,
'results': [{'assigned_to': 43,
'category': 'Unused',
'comments': None,
'completed_ts': None,
'created': '2019-05-27T05:14:22.306843Z',
'description': 'Pollution',
'display_name': {'admin': False,
'business_name': 'Test Business',
'contact_number': 'some_number',
'dob': None,
'email': 'some_mail',
'emp_id': None,
'first_name': 'Alisha'}}]},
{'count': 309,
'next': 'some_url',
'previous': None,
'results': [{'assigned_to': 44,
'category': 'Unused',
'comments': None,
'completed_ts': None,
'created': '2019-05-27T05:14:22.306843Z',
'description': 'Pollution',
'display_name': {'admin': False,
'business_name': 'Test Business',
'contact_number': 'some_number',
'dob': None,
'email': 'some_mail',
'emp_id': None,
'first_name': 'Ali'}}]},......}]
如果它是单独的 json 文件。我会使用创建数据框
df =spark.read.json('myfile.json')
然后将所有数据帧合并为一个。我在直接从列表本身转换数据帧时遇到问题。我用过这个
from pyspark.sql import SparkSession
spark= SparkSession.builder.appName("Basics").getOrCreate()
sc= spark.sparkContext
df = pyspark.sql.SQLContext(sc.parallelize(data_list))`
它给了我
AttributeError:“RDD”对象没有属性“_jsc”
最佳答案
我无法找到您问题的直接答案。但这个解决方案有效,
import json
import ast
df = sc.wholeTextFiles(path).map(lambda x:ast.literal_eval(x[1]))\
.map(lambda x: json.dumps(x))
df = spark.read.json(df)
这将为您提供输出,
+-----+--------+--------+--------------------+
|count| next|previous| results|
+-----+--------+--------+--------------------+
| 308|some_url| null|[[43,Unused,null,...|
| 309|some_url| null|[[44,Unused,null,...|
+-----+--------+--------+--------------------+
编辑: 如果它在变量中,您所要做的就是,
import json
df = sc.parallelize(data).map(lambda x: json.dumps(x))
df = spark.read.json(df)
关于python - 如何将 json 对象列表转换为单个 pyspark 数据帧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56337586/