我想把这个json转换成一个pyspark数据帧,我已经添加了我当前的代码.

json = {
"key1": 0.75,
"values":[
    {
        "id": 2313,
        "val1": 350,
        "val2": 6000
    },
    {
        "id": 2477,
        "val1": 340,
        "val2": 6500
    }
]

}

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

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()

output

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

帮助欣赏,以获得预期的输出.

Expecting output:

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

推荐答案

你可以试试Spark inline功能.

df = df.selectExpr("key1", "inline(values)")

Python相关问答推荐

Pydantic:如何将对象列表表示为dict(将列表序列化为dict)

如何在Python中使用时区夏令时获取任何给定本地时间的纪元值?

如何才能知道Python中2列表中的巧合.顺序很重要,但当1个失败时,其余的不应该失败或是0巧合

acme错误-Veritas错误:模块收件箱没有属性linear_util'

使用新的类型语法正确注释ParamSecdecorator (3.12)

滚动和,句号来自Pandas列

如何避免Chained when/then分配中的Mypy不兼容类型警告?

Polars:用氨纶的其他部分替换氨纶的部分

OR—Tools中CP—SAT求解器的IntVar设置值

将tdqm与cx.Oracle查询集成

如何使用Python以编程方式判断和检索Angular网站的动态内容?

从一个系列创建一个Dataframe,特别是如何重命名其中的列(例如:使用NAs/NaN)

所有列的滚动标准差,忽略NaN

使用NeuralProphet绘制置信区间时出错

如何使Matplotlib标题以图形为中心,而图例框则以图形为中心

Python中的变量每次增加超过1

在方法中设置属性值时,如何处理语句不可达[Unreacable]";的问题?

交替字符串位置的正则表达式

在Google Drive中获取特定文件夹内的FolderID和文件夹名称

使用字典或列表的值组合