Apache Datafusion中同名列DataFrame关联操作异常问题求助
解决Apache DataFusion中文件源DataFrame关联时的重复Schema错误
问题现象
从CSV/Parquet文件读取的含同名列的DataFrame执行关联操作时,抛出Schema error: Schema contains duplicate qualified field name "?table?".id1错误;但从Python字典生成的同结构DataFrame可正常完成关联。
解决方案
方法1:为DataFrame设置别名(推荐)
给每个从文件读取的DataFrame分配唯一别名,避免默认临时表名重复导致的字段限定名冲突:
# 读取文件时添加别名 df_small = ctx1.read_csv("small.csv").alias("small") df_x = ctx1.read_csv("x.csv").alias("x") # 执行关联操作 result = df_small.join(df_x, on="id1") result.show()
方法2:重命名列并显式指定关联键
通过重命名其中一个DataFrame的列,消除列名冲突,再显式指定左右关联键:
# 重命名右侧DataFrame的所有列 df_x_renamed = df_x.with_columns([ col("id1").alias("id1_right"), col("col2").alias("col2_right"), col("col3").alias("col3_right") ]) # 基于不同列名执行关联 result = df_small.join(df_x_renamed, left_on="id1", right_on="id1_right") result.show()
原因说明
从文件读取的DataFrame默认使用临时标识符?table?作为表名,当两个此类DataFrame关联时,字段的限定名(如?table?.id1)会完全重复,触发Schema唯一性校验错误。而从Python字典生成的DataFrame,内部未添加此类限定性表标识,因此允许结果中存在重复列名,关联操作可正常执行。
内容的提问来源于stack exchange,提问作者Andrey Aksenov
相关产品推荐
相关产品推荐

