我将文件加载到数据框中,在将数据框保存到表中之前,我想检查数据框中的任何行是否已存在于表中。
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后的数据帧。
答案 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)
行。