小编Joe*_*787的帖子

Spark / Scala-当一个数据为空时,比较数据框中的两列

我正在使用Spark(Scala)进行质量检查数据移动-将表从一个关系数据库移动到另一个关系数据库。QA流程涉及在源表和目标表之间执行完全外部联接。

源表和目标表在键上的数据帧中联接:

val joinColumns = for (i <- 0 to (sourceJoinFields.length - 1)) yield sourceDF.col(sourceJoinFields(i)) <=> targetDF.col(targetJoinFields(i))
val joinedDF = sourceDF.join(targetDF, joinColumns.reduce((_&&_)), "fullouter")
Run Code Online (Sandbox Code Playgroud)

我使用以下逻辑来查找不匹配项:

val mismatchColumns = for (i <- 0 to (sourceDF.columns.length-1)) yield (joinedDF.col(joinedDF.columns(i)) =!= joinedDF.col(joinedDF.columns(i+(sourceDF.columns.length))))
val mismatchedDF = joinedDF.filter(mismatchColumns.reduce((_||_)))
Run Code Online (Sandbox Code Playgroud)

但是,如果完整外部联接的一侧缺少键:

val joinColumns = for (i <- 0 to (sourceJoinFields.length - 1)) yield sourceDF.col(sourceJoinFields(i)) <=> targetDF.col(targetJoinFields(i))
val joinedDF = sourceDF.join(targetDF, joinColumns.reduce((_&&_)), "fullouter")
Run Code Online (Sandbox Code Playgroud)

将不会出现在不匹配的DF数据集中。

所以我的问题是:=!=运算符与运算符相反<=>吗?似乎不是,因此是否有一个运算符将针对这种情况返回FALSE?我找不到关于任何一个运算符的太多文档。

sql null scala apache-spark apache-spark-sql

3
推荐指数
1
解决办法
3559
查看次数

标签 统计

apache-spark ×1

apache-spark-sql ×1

null ×1

scala ×1

sql ×1