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

PySpark读取JSON时提示存在重复列但实际无重复列如何解决?

PySpark读取JSON提示重复列的排查解决方法

核心原因

PySpark默认的大小写不敏感配置、自动schema推断逻辑,和其他支持大小写敏感的JSON读取工具逻辑存在差异,是导致该问题的主要诱因。

排查步骤

  • 检查JSON字段的大小写差异:PySpark默认spark.sql.caseSensitive参数为false,仅大小写不同的字段会被判定为重复列。比如JSON中同时存在AmendationCommentKey和amendationcommentkey时,其他区分大小写的工具会识别为两个不同字段,PySpark则会触发重复列报错。
  • 检查嵌套结构字段:如果JSON包含嵌套对象,需确认同一嵌套层级下是否存在仅大小写不同的同名字段,或多嵌套层级展平操作时出现的同名冲突。
  • 检查读取路径正确性:你提供的代码中路径存在多余的]字符(abfss://<Container>]@<DIR>),可能会导致误匹配到其他容器的文件,其他文件中可能存在真实重复字段。
  • 验证文件扫描范围:PySpark读取路径时默认会扫描目标路径下所有符合格式的文件,包括隐藏文件、碎文件,可确认路径下是否存在其他未注意到的JSON文件。

解决方法

方法1:开启大小写敏感配置

读取前修改Spark会话的大小写敏感参数即可:

spark.conf.set("spark.sql.caseSensitive", "true")

# 后续执行原有读取逻辑
df = (
    spark.read.option("multiline", "true")
    .options(encoding="UTF-8")
    .load(
        "abfss://<Container>@<DIR>.dfs.core.windows.net/export28.json", format="json"
    )
)

方法2:手动指定schema

提前定义明确的JSON结构schema,跳过Spark自动schema推断逻辑,避免推断误差:

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

# 根据实际JSON结构补全所有字段定义
custom_schema = StructType([
    StructField("amendationcommentkey", StringType(), nullable=True),
    StructField("amendationreasonkey", StringType(), nullable=True),
    StructField("amendationregulatoryproofkey", StringType(), nullable=True),
    # 补充其他字段
])

df = (
    spark.read.option("multiline", "true")
    .options(encoding="UTF-8")
    .schema(custom_schema)
    .load(
        "abfss://<Container>@<DIR>.dfs.core.windows.net/export28.json", format="json"
    )
)

方法3:限制读取文件范围

如果路径下存在多余JSON文件,可通过pathGlobFilter参数指定仅读取目标文件:

df = (
    spark.read.option("multiline", "true")
    .options(encoding="UTF-8")
    .option("pathGlobFilter", "export28.json")
    .load(
        "abfss://<Container>@<DIR>.dfs.core.windows.net/", format="json"
    )
)

内容的提问来源于stack exchange,提问作者Shailendra Kad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 13:45:06