将两个数据帧连接到pyspark

2024-09-29 01:28:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在pyspark中加入两个数据帧

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

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

我怎么做呢? 数据在两个数据帧中的排序方式相同,因此我只需要从一个数据帧向另一个数据帧传递一列(data3)


Tags: 数据实例排序on方式classpysparkhow
1条回答
网友
1楼 · 发布于 2024-09-29 01:28:24

欢迎来到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"))

允许您使用dataset标识源于哪个列

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

相关问题 更多 >