无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
相关产品推荐
相关产品推荐

