Spark查找重复数据:临时视图SQL vs DataFrame聚合,哪种更高效?
Spark查找DataFrame重复数据:两种方案的效率对比
结论
两种方案的性能几乎完全一致,不存在明显的效率差异。
原因分析
Spark的核心优化引擎Catalyst会对所有查询(不管是SQL语句还是DataFrame API调用)进行统一的解析、优化和执行计划生成:
- 你提供的两种写法,本质逻辑完全相同:按指定key列分组 → 统计每组行数 → 过滤出行数大于1的组 → 统计这些组的数量。
- 不管是通过临时视图写SQL,还是直接用DataFrame的
groupBy/agg/filter链式调用,最终都会被Catalyst转换成完全一致的物理执行计划。你可以通过在两个查询末尾调用explain()来验证,会看到两者的执行计划完全一样。
注意:修正选项2的代码错误
你给出的选项2代码存在语法问题,正确的写法应该是:
df.groupBy("keycol") .agg(count("keycol").alias("new_col")) // alias需加在agg函数内部 .filter("new_col > 1") .count()
原代码中alias("new_col")的位置错误,会导致后续过滤无法找到对应的列名。
内容的提问来源于stack exchange,提问作者kartheek
相关产品推荐
相关产品推荐

