spark2.4 sql 快速列去重(冗余列检查)

        一直想做一个勤奋的人,笔耕方田,将自己在从事spark开发四年来积累的奇淫巧技分享出来。在给大家提供参考方案的同时也在总结和优化之前的设计。如果在有幸碰到大牛忍不住提出更好的优化方案能从中受益,也不枉码了这么多字。每当设计出一个很好的计算方案,就会忍不住打开博客想分享出来。然后会一直琢磨该以什么样的文字描述出来,想着想着就放弃了。总是想构思一个比较完美的结构段落,结果到最后什么也没有写出来。分享也就这样一直拖下去了。可能也有很多勤奋的人,和我一样毁于强迫症。

         回归正题

        背景:最近在做的项目,需要处理大量的列。需要对这些列进行去除冗余列,保留不相同的列。大概有15000+列左右。

        第一版设计

        使用了最原始的计算方式,两两组合进行比较。算倒是能够计算的出来,只是性能实在试太差了,并且时不时的会爆出codeGene buffer 超出了64k。调整了很久最终也能稳定的计算过去,只是这样计算实在试太慢。

        性能分析

       1.5万列,两两组合大概有15000*14999/2=112492500种组合,由于会边比较边丢失冗余列所以组合数大概在0.9亿左右。先不考虑行数,列组合比较就需要0.9亿组合,甚至列组合比行数还要多。这种计算实在是太消耗资源和时间!

        第二版设计

        先计算每列的非空count和基元个数(count distinct),只有count和基元个数相同的情况下,再去两两组合比较。虽然在前期计算非空count和(count distinct)消耗了不少时间,但是整体计算时间变成了原来的三分之一。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值