新人已经不注重效率
大数据清洗炸出来的菜鸟
最近的一个项目是 大数据清洗 ,因为时间和空间问题,客户不满意,让我来优化下。
空间
经常性内存出错异常退出,这是一个云平台加工,调试非常繁琐,在本地的正常的代码在云端频繁出错。
考虑到本地机器与云内存不同,且系统不同,改进如下:
- 文件先获取到磁盘再操作,而不是在内存中直接打开;
- 几乎所有代码print时间和内存占用,针对出错操作进行优化;
- 重新定义数据类型;
- 分歧处理先保存为文件而不是内存副本;
时间
十万行数据处理(有复杂的统计类)耗时40分钟。据客户说,拿样品运行真实数据4000万条,跑了一天没结束。。。
- 集计前赋值;
- 先分组再集计;
结果:35万数据处理耗时2分钟
结束了吗?并没有
依瓢画葫芦
菜鸟拿到我的代码后,照猫画虎写了其他处理,然后超时了。
35万行数据的超时设定是60分钟。
让他们找出程序卡在哪一步,最后发现是两个嵌套的for。
35万*35万=122,5万万=1225亿。。。
问题关键
有两组数据,需要根据两组数据中的两个关键字进行匹配,找出不相关的数据。
他们叫上我一起开会,讨论各种优化算法:先排序,从一边开始匹配,直到没有匹配,再换另一边开始。。。怎么听怎么复杂
解决
趁他们讨论得不可开交,我已经把方案做出来,且测试只要2分钟。
方案很简单,生成两组临时数据,一组只包含index和2个关键字,另一组还包含一个非空值。然后把它们进行一个左连接,这样没有值匹配的内容就是空值,找出空值的index就是不相关数据。
收工
总结
硬件提升,一些劣质的代码也可以非常顺畅地运行,导致新人不再节衣缩食,对代码质量没有了追求。
一旦遇到大量的处理,很可能就无法招架。
硬件的提升是为了处理更多的数据,而为了处理更多的数据,需要更小心地处理每个细节。