PySpark Union操作报错:表列数不一致但实际列数相同问题求助
解决DataFrame Union时列数不匹配的问题
核对代码中使用的DataFrame对象与列数
你代码里用的是dm_turnover_tmp_vend,但描述里的目标表是dm_turnover_tmp_vend_all,先确认这个变量的实际列数,打印验证:print(f"dm_turnover_tmp_vend列数:{len(dm_turnover_tmp_vend.columns)}") print(f"we79pvwf列数:{len(we79pvwf.columns)}")大概率是
dm_turnover_tmp_vend实际只有3列,和你描述的dm_turnover_tmp_vend_all不是同一个对象。改用按列名匹配的
unionByNameunion是按列的位置匹配,哪怕列名一致但顺序不同也可能报错。换成unionByName会严格按列名对齐合并,无需考虑列顺序:dm_turnover_tmp_vend_all = dm_turnover_tmp_vend.unionByName(we79pvwf)若存在列名不一致场景(你的情况应该不存在),Spark 3.1+可添加
allowMissingColumns=True参数兼容。强制统一列顺序后再合并
显式指定列顺序,确保两个DataFrame的列完全对齐:fixed_columns = ['dmmcu', 'dmitm', 'dmvend', 'ibvend'] df1 = dm_turnover_tmp_vend.select(fixed_columns) df2 = we79pvwf.select(fixed_columns) dm_turnover_tmp_vend_all = df1.union(df2)排查DataFrame是否被意外修改
检查dm_turnover_tmp_vend在执行union前的操作历史,是否有drop、select等修改列数的操作,导致其列数变为3列。
内容的提问来源于stack exchange,提问作者Arpan Ghimire
相关产品推荐
相关产品推荐

