You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PySpark将JSON字符串拆分为多列

如何使用PySpark将JSON字符串拆分为多列

看起来你现在有个PySpark DataFrame,里面一列全是API返回的JSON字符串,想要把这些嵌套的JSON结构拆成单独的列对吧?我来一步步教你怎么做~

首先先明确你当前的DataFrame状态:一列名为_1的字符串类型列,每一行都是完整的JSON字符串。接下来我们分三步完成拆分:

1. 定义JSON数据的Schema(推荐方式)

PySpark解析JSON时需要明确的Schema(结构定义),这样不仅效率更高,还能避免数据类型推断出错。假设你的JSON结构类似这样(根据实际API返回调整):

{
  "abilities": [{"name": "overgrow", "url": "https://example.com/ability/1"}],
  "name": "bulbasaur",
  "id": 1
}

那对应的PySpark Schema可以这么定义:

from pyspark.sql.types import StructType, StructField, StringType, IntegerType, ArrayType

# 先定义嵌套的abilities元素的Schema
ability_schema = StructType([
    StructField("name", StringType(), nullable=True),
    StructField("url", StringType(), nullable=True)
])

# 再定义整体JSON的Schema
json_schema = StructType([
    StructField("abilities", ArrayType(ability_schema), nullable=True),
    StructField("name", StringType(), nullable=True),
    StructField("id", IntegerType(), nullable=True)
])

如果不确定JSON的具体结构,也可以先让PySpark自动推断Schema(适合小数据量测试):

# 取第一行的JSON字符串作为样本
sample_json = df.select("_1").first()[0]
# 基于样本推断Schema
inferred_schema = spark.read.json(spark.sparkContext.parallelize([sample_json])).schema

2. 将JSON字符串解析为结构化的Struct列

使用from_json函数,把_1列的字符串解析成Struct类型的列:

from pyspark.sql.functions import from_json, col

# 添加一个名为parsed_json的Struct列,包含所有JSON字段
df_parsed = df.withColumn("parsed_json", from_json(col("_1"), json_schema))

这时候你的DataFrame会新增一列parsed_json,展开后能看到所有JSON的字段和对应值。

3. 将Struct列拆分为独立的多列

最后一步就是把Struct里的每个字段提取成单独的列:

  • 如果不需要保留原有的_1列,可以直接展开所有字段:
df_final = df_parsed.select("parsed_json.*")
  • 如果要保留原JSON字符串列:
df_final = df_parsed.select(col("_1"), "parsed_json.*")

完成后你就能得到每个JSON字段对应的独立列了!比如abilities、name、id这些列,完全符合你的需求~

备注:内容来源于stack exchange,提问作者Maurilio Cardoso

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 11:23:06