PySpark合并两个结构不同的DataFrame,用union仅返回首表如何解决
PySpark的union函数要求参与合并的两个DataFrame列数、列顺序完全一致,且是按位置匹配列而非按列名匹配。你当前使用的df1只有3列,df2有4列(多出Capacity字段),不符合union的调用要求,因此无法得到正确合并结果。
解决方法
- 先为列数更少的df1补充缺失的
Capacity字段,值设为空,注意字段类型要和df2的Capacity类型保持一致:
from pyspark.sql.functions import lit # 补充Capacity列,这里以df2的Capacity是int类型为例,可根据实际类型调整cast参数 df1_full = df_1.withColumn("Capacity", lit(None).cast("int"))
- 合并两个DataFrame,优先使用
unionByName(按列名匹配,兼容列顺序不同的场景):
df_result = df1_full.unionByName(df_2)
如果使用的Spark版本低于2.3,不支持unionByName,可以手动对齐两表的列顺序后再调用union:
common_cols = ["Place", "Month", "People", "Capacity"] df_result = df1_full.select(common_cols).union(df_2.select(common_cols))
执行后调用df_result.show()即可得到你需要的合并结果。
内容的提问来源于stack exchange,提问作者user175025
相关产品推荐
相关产品推荐

