首页 > 解决方案 > 加入两个数据框pyspark

问题描述

我想加入两个数据框pyspark。

我正在使用join ,但这会增加实例。

dfResult = df1.join(df2, on='Class', how="inner")

我怎么能做到?两个数据帧中的数据以相同的方式排序,所以我只需要将一列(data3)从一个数据帧传递到另一个数据帧。

标签: pythonjoinpysparkapache-spark-sql

解决方案


欢迎来到 SO!已经有几个类似的问题了。您似乎有一个数据集,恰好有几个同名的列。它发生了。但是 spark 期望它们都不同,除了您加入的列。您可以通过简单地重命名列来解决此问题。

df1 = spark.createDataFrame(spark.sparkContext.parallelize([("123456","Rose","Yellow"),("123456","Jasmine","white"),("789654","Lily","Purple")])).toDF(*["id","name","color"])
df2 = spark.createDataFrame(spark.sparkContext.parallelize([("123456","Rose","Canada"),("123456","Jasmine","US"),("333444","Lily","Purple")])).toDF(*["id","name","Place"])

df3 = df1.join(df2, on=["name"], how="inner")
df3.show()

不重命名的加入会导致

+-------+------+------+------+------+
|   name|    id| color|    id| Place|
+-------+------+------+------+------+
|   Rose|123456|Yellow|123456|Canada|
|Jasmine|123456| white|123456|    US|
|   Lily|789654|Purple|333444|Purple|
+-------+------+------+------+------+

重命名加入

df3 = df1.join(df2, on=["name"], how="inner").select("name", "Place",df1.id.alias("id_1"), df2.id.alias("id_2"))

允许您使用数据集识别来自哪个列。

+-------+------+------+------+
|   name| Place|  id_1|  id_2|
+-------+------+------+------+
|   Rose|Canada|123456|123456|
|Jasmine|    US|123456|123456|
|   Lily|Purple|789654|333444|
+-------+------+------+------+

推荐阅读