联合会不会删除Spark数据框中的重复行

时间:2018-09-25 09:19:20

标签: scala apache-spark apache-spark-sql

我有两个数据框,如下所示

+--------------------+--------+-----------+-------------+
|UniqueFundamentalSet|Taxonomy|FFAction|!||DataPartition|
+--------------------+--------+-----------+-------------+
|192730241374        |1       |I|!|       |Japan        |
|192730241374        |2       |I|!|       |Japan        |
|192730241373        |1       |I|!|       |Japan        |
|192730241373        |2       |I|!|       |Japan        |
+--------------------+--------+-----------+-------------+

+--------------------+--------+-----------+-------------+
|UniqueFundamentalSet|Taxonomy|FFAction|!||DataPartition|
+--------------------+--------+-----------+-------------+
|192730241374        |1       |I|!|       |Japan        |
|192730241374        |2       |I|!|       |Japan        |
|192730391384        |1       |I|!|       |Japan        |
|192730391384        |2       |I|!|       |Japan        |
|192730241373        |1       |I|!|       |Japan        |
|192730241373        |2       |I|!|       |Japan        |
+--------------------+--------+-----------+-------------+

当我在上述数据框之间执行合并时,我得到重复的行。 这是我的输出

+--------------------+--------+-----------+-------------+
|UniqueFundamentalSet|Taxonomy|FFAction|!||DataPartition|
+--------------------+--------+-----------+-------------+
|192730241374        |1       |I|!|       |Japan        |
|192730241374        |2       |I|!|       |Japan        |
|192730241373        |1       |I|!|       |Japan        |
|192730241373        |2       |I|!|       |Japan        |
|192730241374        |1       |I|!|       |Japan        |
|192730241374        |2       |I|!|       |Japan        |
|192730391384        |1       |I|!|       |Japan        |
|192730391384        |2       |I|!|       |Japan        |
|192730241373        |1       |I|!|       |Japan        |
|192730241373        |2       |I|!|       |Japan        |
+--------------------+--------+-----------+-------------+

val dfToSave = dfMainOutput.union(insertdf)

我的印象是union删除重复的行,而unionall保留它。 合并后我必须使用distinct。 有人可以解释一下。

1 个答案:

答案 0 :(得分:4)

您的印象是错误的。如the official documentation中所述:

  

返回一个新的数据集,该数据集包含此数据集和另一个数据集中的行并集。

     

这等效于SQL中的UNION ALL。要执行SQL样式的集合并集(对元素进行重复数据删除),请使用此函数,后跟distinct

     

此功能也是SQL中的标准功能,它按位置(而不是按名称)解析列: