首页 > 解决方案 > 如何从两个数据框 d1 和 d2 的连接中过滤掉记录,其中 d1 中的所有列 =!= d2 中的所有对应列

问题描述

基本上我想检查新文件与昨天文件的比较中是否有任何更新的记录。例如。我有两个文件,“备份文件”和“当前文件”,其中我正在创建两个数据帧,即 bkpdataframe(别名“bdf”)和 currentdataframe(别名“cdf”)。下面是我为更新记录编写的代码。

val joined= bdf.join(cdf,Seq("_c0"),"left")

val updatedRecords= joined.filter( (cdf("_c0").isNotNull && ( cdf("_c1") =!= bdf("_c1") || cdf("_c2") =!= bdf("c2"))

是否有用于检查所有列的通用代码。基本上我不想硬编码列名?

标签: scalaapache-spark-sqlapache-spark-2.0

解决方案


如果您的dataframecontains 是唯一的rows,那么您可以使用except函数。函数返回在df1-df2except中不相似的记录dataframes

val updatedRecords=bdf.except(cdf).count
if(updatedRecords>0) println("Record updated") else println("Record Not updated")

如果你想查找更新记录

val updatedRecDF=cdf.except(bdf)

推荐阅读