加入两个数据框pyspark

Posted

技术标签:

【中文标题】加入两个数据框pyspark【英文标题】:join two dataframe the pyspark 【发布时间】:2021-05-25 18:28:59 【问题描述】:

我想加入两个数据框 pyspark。

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

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

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

【问题讨论】:

欢迎来到 SO,你所说的“乘以实例”是什么意思?一般来说,如果您提供一个最小的可重现示例,您将获得最佳答案,请参阅***.com/help/minimal-reproducible-example 我的意思是数据的行数。在 df1 中,我有 150 行/示例,就像在 df2 中一样。好吧,应用连接后,我碰巧有 20,290 行/示例。我正在寻找的是保留 150 行/示例,但加入两个数据框 您需要在关键列上连接两个数据框,即每行唯一的字段组合。您可以使用on=['col1', 'col2', ...] 进行操作。目前,每一行的类列不是唯一的,导致重复。 class列是唯一标识,问题是它不是每一行唯一的id,它把数据分成两个类,每一行没有唯一标识,除了事实上,数据在两个数据框中保持相同的顺序。 如果您没有要加入的列,那么这将不起作用。使用这些数据大小,使用 pandas 和附加数据帧会简单得多。您可以从生成的 pandas df 创建一个 spark df。但是,如果没有适当的可重现示例,我将无法为您提供进一步的帮助。 【参考方案1】:

欢迎来到 SO!有几个similar questions already。您似乎有一个数据集,恰好有几个同名的列。它发生了。但是 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|
+-------+------+------+------+

【讨论】:

以上是关于加入两个数据框pyspark的主要内容,如果未能解决你的问题,请参考以下文章

加入两个数据框和结果数据框在 PySpark 中包含不重复的项目?

加入两个数据框表[重复]

根据线序加入两个熊猫数据框

加入两个分区数据框pyspark

在python中的公共列上加入两个数据框

如何加入/合并来自 Quandl 的两个数据框?