我有两个数据框,如下所示
+--------------------+--------+-----------+-------------+
|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。 有人可以解释一下。
答案 0 :(得分:4)
您的印象是错误的。如the official documentation中所述:
返回一个新的数据集,该数据集包含此数据集和另一个数据集中的行并集。
这等效于SQL中的UNION ALL。要执行SQL样式的集合并集(对元素进行重复数据删除),请使用此函数,后跟
distinct
。此功能也是SQL中的标准功能,它按位置(而不是按名称)解析列: