Pyspark 合并两个列数不同但没有相似列的数据帧
我有两个不同列的数据帧,其中一个数据帧的行索引如下:Pyspark 合并两个列数不同但没有相似列的数据帧,pyspark,apache-spark-sql,Pyspark,Apache Spark Sql,我有两个不同列的数据帧,其中一个数据帧的行索引如下: +------------+--------------+ | rec_id1| rec_id2| +------------+--------------+ |rec-3301-org|rec-3301-dup-0| |rec-2994-org|rec-2994-dup-0| |rec-2106-org|rec-2106-dup-0| |rec-3771-org|rec-3771-dup-0| |rec-3886-org
+------------+--------------+
| rec_id1| rec_id2|
+------------+--------------+
|rec-3301-org|rec-3301-dup-0|
|rec-2994-org|rec-2994-dup-0|
|rec-2106-org|rec-2106-dup-0|
|rec-3771-org|rec-3771-dup-0|
|rec-3886-org|rec-3886-dup-0|
| rec-974-org| rec-974-dup-0|
| rec-224-org| rec-224-dup-0|
|rec-1826-org|rec-1826-dup-0|
| rec-331-org| rec-331-dup-0|
|rec-4433-org|rec-4433-dup-0|
+------------+--------------+
+----------+-------+-------------+------+-----+-------+
|given_name|surname|date_of_birth|suburb|state|address|
+----------+-------+-------------+------+-----+-------+
| 0| 1.0| 1| 1| 1| 1.0|
| 0| 1.0| 0| 1| 1| 1.0|
| 0| 1.0| 1| 1| 1| 0.0|
| 0| 1.0| 1| 1| 1| 1.0|
| 0| 1.0| 1| 1| 1| 1.0|
| 0| 1.0| 1| 1| 1| 1.0|
| 0| 1.0| 1| 1| 1| 1.0|
| 0| 1.0| 0| 1| 1| 1.0|
| 0| 1.0| 1| 1| 1| 1.0|
| 0| 1.0| 1| 0| 1| 1.0|
+----------+-------+-------------+------+-----+-------+
我希望将两个pyspark数据帧合并为一个,这样新的数据帧如下所示:
given_name surname ... state address
rec_id_1 rec_id_2 ...
rec-3301-org rec-3301-dup-0 0 1.0 ... 1 1.0
rec-2994-org rec-2994-dup-0 0 1.0 ... 1 1.0
rec-2106-org rec-2106-dup-0 0 1.0 ... 1 0.0
假设行数相同。如果行数相同,则可以为每个数据帧创建一个临时列,其中包含生成的ID,并将此列上的两个数据帧连接起来。 该示例有两个数据帧,每列中的值相同,但列名不同。因此,组合结果应包含8列和相应的值
test\u df=spark.createDataFrame([
(1,"2",5,1),(3,"4",7,8),(10,"11",12,13),
](“col1”、“col2”、“col3”、“col4”))
test_df2=spark.createDataFrame([
(1,"2",5,1),(3,"4",7,8),(10,"11",12,13),
](“第五列”、“第六列”、“第七列”、“第八列”))
test_df=test_df.with column(“id”,单调递增的_id())
test_df2=test_df2.带列(“id”,单调递增的_id())
test_df.join(test_df2,“id”,“internal”).drop(“id”).show()
结果:
+----+----+----+----+----+----+----+----+
|col1 | col2 | col3 | col4 | col5 | col6 | col7 | col8|
+----+----+----+----+----+----+----+----+
| 1| 2| 5| 1| 1| 2| 5| 1|
| 3| 4| 7| 8| 3| 4| 7| 8|
| 10| 11| 12| 13| 10| 11| 12| 13|
+----+----+----+----+----+----+----+----+
用于生成此输出的逻辑是什么?输出是使用虚拟USAFAIK生成的,ID基于分区数。因此,如果这两个数据帧具有不同数量的分区,这将不能保证工作。它工作了!请注意,从pyspark.sql导入函数中添加作为F
是至关重要的,以便使用函数单调地增加id()
即F。单调地增加id()
如果行不相同怎么办?我猜如果你有两个数据帧,其中有n行和m行,并像这样连接它们,你会收到连接的数据帧,其中有n行,如果n@pault,我有这个问题,两个数据帧有不同数量的分区,合并的结果是错误的。你有办法解决这个问题吗?