在两个数据框之间分隔唯一和重复的条目

时间:2018-03-05 07:36:47

标签: scala apache-spark

我将文件加载到数据框中,在将数据框保存到表中之前,我想检查数据框中的任何行是否已存在于表中。

e.g。 我的表有以下架构

A  B  C 
1  2  3 
2  4  5

我的数据框有以下

A  B  C
1  2  5 
2  3  5

唯一的定义是A&的组合。 B栏。因此在上面的例子中,重复条目是(1,2,5),因为数据帧和表都有(1,2)作为A&的值。 B.和唯一记录是(2,3,5)因为表格没有(2,3)作为A&的值。 B.

所以我想要的输出是两个数据帧。一个包含唯一的,即(2,3,5),一个包含重复,即(1,2,5)。

让我将当前的数据框称为df1&将表加载为df2后的数据帧。

1 个答案:

答案 0 :(得分:0)

首先,加入数据帧以获取重复的行,例如:

val df2alias = "df2"
val resultColumns = df2.columns.map(colName => s"$df2alias.$colName")

val duplicates = df1.join(df2.as(df2alias))
  .where(df1("A") === df2("A") && df1("B") === df2("B"))
  .select(resultColumns.head, resultColumns.tail:_*)

duplicates仅包含(1, 2, 5)行。

其次,使用duplicates获取唯一行:

val uniques = df2.except(duplicates)

uniques仅包含(2, 3, 5)行。