python - 如何将 json 对象列表转换为单个 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-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/

相关文章:

python - pyqt5 tablewidgets 检索数据

python - 如何确定页面是否被重定向

python - 是否有用于创建特定大小的测试文件的 Python 模块?

json - Angular:HttpClient 错误,响应为空 200/201(总是调用 JSON.parse (""))

ruby-on-rails - Rails 通过关联渲染 has_many 的 JSON

python - RFECV 与 GridSearchCV 中的评分有什么区别?

Python - 函数不是 'Global',因此无法在线程类中调用

javascript - 将 Json 数组内的数组映射到 Angularjs 范围

machine-learning - 梯度下降迭代法 - 线性回归

python - Python 中的矩阵补全