如何使用具有不同列号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

如果col8col9数字,则执行-

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的两个数据帧的并集的主要内容,如果未能解决你的问题,请参考以下文章

加入两个 Pyspark 数据帧的两种方法有啥区别

两个 pyspark 数据帧的余弦相似度

如何合并具有不同列号的两个表,同时删除具有大量列的表的重复项

合并具有不同索引的两个数据帧,同时使用一行代码保留主数据帧的索引

如何根据PostgreSQL中同一行的两个不同列更新具有唯一序列号的列?

Pyspark - 如何将多个数据帧的列连接成一个数据帧的列