PySpark:如何连接两个没有重复行的数据帧?

时间:2018-04-04 13:08:07

标签: pyspark

我希望将两个数据框A,B连接到一个没有重复行的新数据框(如果B中的行已经存在于A中,请不要添加):

Dataframe A:

   A  B
0  1  2
1  3  1

数据框B:

   A  B
0  5  6
1  3  1

我希望合并它们,以便最终的DataFrame具有以下形状:

最终数据框:

   A  B
0  1  2
1  3  1
2  5  6

我该怎么做?

2 个答案:

答案 0 :(得分:2)

pyspark.sql.DataFrame.unionpyspark.sql.DataFrame.unionAll似乎与重复产生相同的结果。

相反,您可以使用直接SQL获得所需的输出:

dfA.createTempView('dataframea')
dfB.createTempView('dataframeb')

aunionb = spark.sql('select * from dataframea union select * from dataframeb')

使用SQL生成预期/正确的结果。

答案 1 :(得分:1)

为了删除任何重复的行,只需使用union()后跟distinct()。

文档中提到 http://spark.apache.org/docs/2.1.0/api/python/pyspark.sql.html

“联盟(其他) 返回一个新的DataFrame,其中包含此帧和另一帧中的行组合。

这相当于SQL中的UNION ALL。要执行SQL样式的集合联合(对元素进行重复数据删除),请使用此函数,后跟不同的。“