【问题标题】:Handle JSON structure with Pyspark使用 Pyspark 处理 JSON 结构
【发布时间】:2019-09-11 01:25:55
【问题描述】:

我是 spark 新手,并试图将以下格式的 JSON 文件读入 spark 数据帧。这是我的 JSON 格式

“元素”:[

Q4
{
Name:ABC,
Language:English,
Age:45,
Title:SWE

},

Q5
{
Name:DEF,
Language:English,
Age:60
Title: Engineer
},

Q6
{
Name:HIJ,
Language:English,
Age:57,
Title:
}

] 我希望输出是

Name | Language | Age | Title     
ABC  | English  | 45  |   SWE    

DEF  | English  | 60  | Engineer  

HIJ  | English  | 57  |   Null       

如何使用 pyspark 实现这一目标?

【问题讨论】:

    标签: json pyspark apache-spark-sql pyspark-sql


    【解决方案1】:

    请尝试使用

    df=spark.read.json()
    

    读取文件。它会将您的数据转换为数据框格式。如果您需要元素内的文档,您可能需要选择 JSON 元素。

    --编辑部分,如果你想使用硬编码字符串,请参考 spark doc: 来自 spark 文档的示例内容。

    sc = spark.sparkContext
    jsonStrings = ['{"name":"Yin","address":{"city":"Columbus","state":"Ohio"}}']
    otherPeopleRDD = sc.parallelize(jsonStrings)
    otherPeople = spark.read.json(otherPeopleRDD)
    otherPeople.show()
    # +---------------+----+
    # |        address|name|
    # +---------------+----+
    # |[Columbus,Ohio]| Yin|
    # +---------------+----+
    

    --Edit2 以您的示例为例,但我只选择了在此处创建数据框所需的数据。我希望,这对你有用。

        import os
        import sys
        from pyspark.sql import SparkSession
        import json
        from pyspark.sql import Row
    
        spark = SparkSession.builder.master("local").getOrCreate()
    
    
    
        json_doc1='{"elements": {"Q4":{"Name":"ABC","Language":"English","Age":45,"Title":"SWE"},"Q5": {"Name":"DEF","Language":"English","Age":60,"Title": "Engineer"}}}'
        test=json.loads(json_doc1)
        data1=test['elements'].values()
            print (data1)
    
        #rddd1= sc.parallelize()
        df1=spark.createDataFrame(Row(**x) for x in data1)
    
    
        df1.show()
    
    
    +---+--------+----+--------+
    |Age|Language|Name|   Title|
    +---+--------+----+--------+
    | 60| English| DEF|Engineer|
    | 45| English| ABC|     SWE|
    +---+--------+----+--------+
    

    谢谢, 手动

    【讨论】:

    • 谢谢。从您的示例中,如果我想将 Name、City 和 State 作为我的数据框上的列并删除 address struct ,我该怎么做?
    • 嘿,您需要做的第一件事是..更正 JSON 文档。您在此处给出的 JSON 不正确。您可以使用在线工具轻松验证 JSON。
    • 如果你的工作完成了,更新总是好的。如果没有,那么你也应该更新。
    猜你喜欢
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    • 2022-08-12
    相关资源
    最近更新 更多