Spark如何筛选DataFrame中与另一表指定字段不匹配的记录
问题原因
你当前的报错是因为未对两个表执行关联操作的前提下,直接在table1的过滤条件中引用table2的字段,Spark SQL的执行计划无法解析不属于当前数据集的字段,因此抛出属性缺失的异常。
正确实现方式
你要实现的需求是提取table1中istituto、servizio_rap、filiale_rap、codice_rap四个字段与table2对应字段没有完全匹配的记录,Spark提供了专门的left_anti关联类型实现这类需求,性能远高于普通关联后过滤的方案,实现代码如下:
// 指定四个匹配字段 val matchCols = Seq("istituto", "servizio_rap", "filiale_rap", "codice_rap") // left_anti join仅保留左表中未在右表匹配到的记录 val result: DataFrame = table1.join(secondInput, matchCols, "left_anti") // 输出结果验证 result.show()
逻辑说明
left_anti关联会按照指定的字段进行匹配,只要table1中某条记录的四个指定字段值和table2中任意一条记录的对应字段完全相等,该条记录就会被过滤- 最终返回结果完全符合你要求的“四个字段不匹配的记录”的需求,且自动保留
table1的所有字段,不需要额外做字段裁剪
内容的提问来源于stack exchange,提问作者Miko
相关产品推荐
相关产品推荐

