如何使用具有不同列号pyspark的两个数据帧的并集
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用具有不同列号pyspark的两个数据帧的并集相关的知识,希望对你有一定的参考价值。
我有两个数据框:
df1包含从col1到col7的列
df2,由col1到col9的列组成
我需要执行这两个数据帧的合并,但是由于两个额外的列而失败。
您知道还可以使用什么其他功能吗?
答案
将缺少的列col8,col9
添加为df1中的空字符串,然后执行并集。
df1.selectExpr("*","cast(null as string) as col8","cast(null as string) as col9").\
union(df1).\
show()
#Dynamic way
expr=[f for f in df1.columns] + [lit(None).alias(f) for f in df2.columns if f not in df1.columns]
df1.select(expr).union(df2).show()
另一答案
将两列添加到df2
,然后继续进行并集。
导入-
from pyspark.sql.functions import lit
如果col8
和col9
是数字,则执行-
new_df = df2.withColumn("col8", lit(float('nan'))).withColumn("col9", lit(float('nan')))
或者如果col8和col9是字符串,则执行-
new_df = df2.withColumn("col8", lit("")).withColumn("col9", lit(""))
现在将new_df与df1合并。
以上是关于如何使用具有不同列号pyspark的两个数据帧的并集的主要内容,如果未能解决你的问题,请参考以下文章
如何合并具有不同列号的两个表,同时删除具有大量列的表的重复项
合并具有不同索引的两个数据帧,同时使用一行代码保留主数据帧的索引