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

无JOIN操作时Spark DataFrame出现列名歧义错误排查

Spark 单表Select含点列名触发歧义错误的原因解析

问题重现

有一个Spark Dynamic Frame(dyf),其简化Schema如下:

root
|--name : string
|--profile.info : string

执行以下代码选择指定列:

df = dyf.toDF()
df.select("`profile.info`")

抛出如下错误:

AnalysisException: Reference '`profile.info`' is ambiguous, could be: profile.info, profile.info.

通常列名歧义错误由JOIN操作引发,但此处仅执行单表Select,令人困惑。执行df.explain()查看物理计划:

== Physical Plan == 
* (1) Scan ExistingRDD [name#0, profile.info#1]

Spark版本:3.3

根因定位

问题源于GlueContext的create_dynamic_frame.from_catalog方法的潜在bug:当Glue数据目录中的源表列名包含至少两个点(例如a.b.c)时,该方法会生成重复列名——具体是同时生成原列名和最后一个点后字母大写的列名(如a.b.c与a.b.C)。这两个列名在Spark中被视为不同的列,但当用反引号包裹的profile.info去引用时,Spark无法区分这两个大小写差异的列,从而触发歧义错误,该问题和后续的select操作本身无关。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 19:22:23