Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pyspark 合并两个列数不同但没有相似列的数据帧_Pyspark_Apache Spark Sql - Fatal编程技术网

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,我有这个问题,两个数据帧有不同数量的分区,合并的结果是错误的。你有办法解决这个问题吗?