Pyspark:JSON 到 Pyspark 数据帧

Leo*_*ard 5 python dataframe apache-spark pyspark

我想将此 json 转换为 pyspark 数据框,我已添加当前代码。

json = {
"key1": 0.75,
"values":[
    {
        "id": 2313,
        "val1": 350,
        "val2": 6000
    },
    {
        "id": 2477,
        "val1": 340,
        "val2": 6500
    }
]
Run Code Online (Sandbox Code Playgroud)

}

我的代码: 我可以使用我的代码获得预期的输出。希望有人改进这一点。

import json
from pyspark.sql import SparkSession

spark = SparkSession.builder.appName("CreateDataFrame").getOrCreate()

json_string = json.dumps({
    "key1": 0.75,
    "values":[
        {
            "id": 2313,
            "val1": 350,
            "val2": 6000
        },
        {
            "id": 2477,
            "val1": 340,
            "val2": 6500
        }
    ]
})
df = spark.read.json(spark.sparkContext.parallelize([json_string]))

df = df.select("key1", "values.id", "values.val1", "values.val2")
df.show()
Run Code Online (Sandbox Code Playgroud)

输出

+----+-------------+-------------+-------------+
|key1|           id|         val1|         val2|
+----+-------------+-------------+-------------+
|0.75| [2313, 2477]|   [350, 340]| [6000, 6500]|
+----+-------------+-------------+-------------+

Run Code Online (Sandbox Code Playgroud)

帮助欣赏获得预期的输出。

期望输出:

+----+----+----+----+
|key1|  id|val1|val2|
+----+----+----+----+
|0.75|2313| 350|6000|
|0.75|2477| 340|6500|
+----+----+----+----+

Run Code Online (Sandbox Code Playgroud)

过过招*_*过过招 4

您可以尝试 Spark内联功能。

df = df.selectExpr("key1", "inline(values)")
Run Code Online (Sandbox Code Playgroud)