Python 如何将json对象列表转换为单个pyspark数据帧?

Python 如何将json对象列表转换为单个pyspark数据帧?,python,json,machine-learning,pyspark,Python,Json,Machine Learning,Pyspark,我是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-27T0

我是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')
然后将所有数据帧合并为一个。我面临着直接从列表本身转换datframe的问题。我用过这个

from pyspark.sql import SparkSession
spark= SparkSession.builder.appName("Basics").getOrCreate()
sc= spark.sparkContext
df = pyspark.sql.SQLContext(sc.parallelize(data_list))`
它给了我
AttributeError:'RDD'对象没有属性'\u jsc'

我找不到您问题的直接答案。但这个解决方案是有效的

导入json
导入ast
df=sc.wholeTextFiles(path.map)(lambda x:ast.literal_eval(x[1]))\
.map(lambda x:json.dumps(x))
df=spark.read.json(df)
这将为您提供如下输出:

+-----+--------+--------+--------------------+
|计算|下一个|上一个|结果|
+-----+--------+--------+--------------------+
|308 |某些url | null |[43,未使用,null|
|309 |某些url | null |[44,未使用,null|
+-----+--------+--------+--------------------+
编辑: 如果它在一个变量中,你所要做的就是

导入json
df=sc.parallelize(data).map(lambda x:json.dumps(x))
df=spark.read.json(df)

path??我没有任何文件,只有json字符串/对象的列表。你认为我们有这些文件吗?是的!你在变量中有这些文件吗?它在变量中,而不是文件中。我对此进行了研究,并意识到还有一些其他问题,比如环境变量pyspark_python和pyspark_driver_python不一样。我正在运行多个迭代sparkContext的实例。您如何调用该API?是否有循环或某个基于间隔的守护进程正在运行?所有消息也共享相同的模式?如果下一个键中有url,则函数中有循环(检查json),然后它继续提取数据,直到next不为null。@Rohan Kumar我有一个类似的问题,我必须批量读取传入的json数据并将其转储到某个文件中。因此,输出文件中有json对象列表。你能分享一下你是如何循环的吗them@Neha0908不知道我当时是怎么做到的,但您可以使用ApacheKafka来捕获流媒体data&然后从Pyspark中的数据加载特定变量。