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

Databricks 7.3LTS升9.1LTS后读含重复列JSON创建DataFrame报错

解决方案

你可以通过以下几种方式解决该问题,无需完整预定义Schema:

1. 开启旧版本兼容配置(最简便)

Databricks Runtime 9.1基于Spark 3.1.2,默认开启了重复列名校验,你可以在读取数据前执行以下配置,兼容低版本允许重复列名的行为:

# 全局生效,当前Notebook所有后续操作都允许重复列名
spark.conf.set("spark.sql.legacy.allowDuplicateColumnNames", True)

配置完成后再执行原读取代码即可正常生成DataFrame,后续你可以正常select需要的字段、忽略重复的tags字段即可。

2. 仅针对本次读取生效(不修改全局配置)

如果你不想修改全局配置,可以先采样生成Schema后修剪掉重复字段,再用修剪后的Schema读取数据:

from pyspark.sql.types import StructType

# 先读取小批量数据采样得到原始Schema
sample_df = spark.read.option("multiline","true").option("samplingRatio", 0.01).json(f"{path}/IN-109418_Part_1.json")
raw_schema = sample_df.schema

# 移除Schema中重复的tags字段,保留其余字段
# 如果是嵌套层级下的tags字段,递归遍历对应父StructType移除子字段即可
clean_schema = StructType([f for f in raw_schema.fields if f.name != 'tags'])

# 用修剪后的Schema读取全量数据
intermediate_df = spark.read.option("multiline","true").schema(clean_schema).json(f"{path}/IN-109418_Part_1.json")

该方案不需要手动编写整个复杂嵌套Schema,仅需要对自动采样生成的Schema做少量修剪即可,后续新增字段也会自动被采样识别,不会遗漏。

3. CSV格式同问题的处理方式

如果是CSV文件遇到同类重复列报错,除了开启上述兼容配置外,还可以在读取时指定header=False,读取后手动给列重命名,再筛选需要的列即可。

内容的提问来源于stack exchange,提问作者Nirupam Nishant

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 06:54:09