这几天刚处理一个排序问题

源文件: 可以看到有11G大小,需要根据最后一列的热度来做一下排序.如果让你来做这样的排序,在linux环境下,你会如何处理呢?

  1. xch27@lanzhou:/asrdata/users/xch27/lmwork/comm_cloud/aicar_solution/v32_30june2017/data/navi/slot/big$ ls -lh 全量数据_0620.txt
  2. -rw-r--r--. xch27 alab 11G 7 : 全量数据_0620.txt
  3. xch27@lanzhou:/asrdata/users/xch27/lmwork/comm_cloud/aicar_solution/v32_30june2017/data/navi/slot/big$ head 全量数据_0620.txt
  4. 北京南顺油脂有限公司 BeiJing NanShun YouZhi YouXianGongSi 良乡南肖庄道口西 公司企业;公司;公司 北京市 北京市 房山区 9.6901977
  5. 松园派出所 SongYuan PaiChuSuo 松园村 政府机构及社会团体;公检法机构;公安警察 北京市 北京市 昌平区 3004.3764856
  6. 西园村 XiYuanCun 地名地址信息;普通地名;村庄级地名 北京市 北京市 昌平区 73.406943
  7. 仁和镇人民政府 RenHeZhen RenMin ZhengFu 仁和镇政府 顺平西路9 政府机构及社会团体;政府机关;乡镇级政府及事业单位 北京市 北京市 顺义区 2374.4912286
  8. 中国建设银行(北京三元桥支行) ZhongGuo JianShe YinHang (BeiJing SanYuan Qiao ZhiHang) 左家庄路1号国门大厦B1 金融保险服务;银行;中国建设银行 北京市 北京市 朝阳区 2617.5249994
  9. 北京糖业烟酒集团有限公司酒类经营分公司 BeiJing TangYe YanJiu JiTuan YouXianGongSi Jiu LeiJingYing FenGongSi 永定路23 公司企业;公司;公司 北京市 北京市 海淀区 1434.2144127
  10. 东马坊小学 DongMaFang XiaoXue 东马坊20 科教文化服务;学校;小学 北京市 北京市 海淀区 2549.257087
  11. 北辰汇宾大厦 BeiChen HuiBin DaSha 北辰东路8号院- 商务住宅;楼宇;商务写字楼 北京市 北京市 朝阳区 10420.9972344
  12. 北京世纪银嘉文化发展有限公司 BeiJing ShiJi YinJia WenHua FaZhan YouXianGongSi 花园路30号花园商务会馆66216 公司企业;公司;公司 北京市 北京市 海淀区
  13. 向明食品店 XiangMing ShiPinDian 南二环与南二环出口交叉口西南50 购物服务;便民商店/便利店;便民商店/便利店 北京市 北京市 东城区 3.3185239

方法一:

我首先用python来解决:   可以看出代码还是略显复杂,其中排序算法,我用的是列表自带的sort方法,也可以自己写,参考上一篇文章,用里面的归并排序.但是这个程序最大的问题是什么?有两个,一个是慢,另一个是太耗内存

我用的是超算集群跑的,本地程序肯定卡死了,下面我贴了张top的截图,可以看看他用了多少内存,跑了多久,我写这篇记录的时候还没跑完呢,我看看他要跑多久.

  1. #!/usr/bin/python
  2. #coding=utf-8
  3. #__author__='dahu'
  4. #data=2017-
  5. # 处理数据,整理成标准格式
  6. import sys,collections
  7. from operator import itemgetter
  8. def file_pro(filename):
  9. with open(filename,'r') as f:
  10. for line in f:
  11. yield line
  12.  
  13. if __name__ == '__main__':
  14. gen=file_pro(sys.argv[1])
  15. #gen=file_pro('tmp')
  16. block=collections.OrderedDict()
  17. ll=[]
  18. with open(sys.argv[2],'w') as f:
  19. #with open('new_tmp.sort', 'w') as f:
  20. k=0
  21. for line in gen:
  22. line_list=line.split('\t')
  23. line_list=[line.strip() for line in line_list]
  24. value=['名称','拼音','别称','地址','类型','省','市','区县','热度']
  25. block=collections.OrderedDict(zip(value,line_list))
  26. a=0 if block['热度']=='' else block['热度']
  27. block['热度']=float(a)
  28. ll.append(block.copy())
  29. block.clear()
  30.  
  31. ll.sort(reverse=True,key=itemgetter('热度'))
  32.  
  33. for i in ll:
  34. for key in i:
  35. f.write('%s:%s\n'%(key,i[key]))
  36. f.write('\n')
  37. if not k%100000:
  38. print k
  39. k+=1
  1. xch27@taiyuan:/asrdata/users/xch27/lmwork/comm_cloud/aicar_solution/v32_30june2017/data/navi/slot$ python lineprocess_sort.py 全量数据_0620.txt lineprocess_sort.txt

方法2:

这个就牛逼了,10min就搞完了,顺序已经排好了,格式就不是问题了,再用awk修改下输出格式就ok了,看来大量数据的处理方式还是尽量少用python,  linux 自带的awk和其他的实用程序是个不错的选择.~

  1. #awk '{printf("%f>>>%s\n",$NF,$0)}' 全量数据_0620.txt|sort -nr > awk.method.txt #非常快速的一个方法!比python快n倍

为什么可以这么快! awk 与python的应用的更多相关文章

  1. 快排的python实现

    快排的python实现 #python 2.7 def quick_sort(L): if len(L) <= 1: return L else: return quick_sort([lt f ...

  2. 天下武功,无快不破,Python开发必备的6个库

    01 Python 必备之 PyPy PyPy 主要用于何处? 如果你需要更快的 Python 应用程序,最简单的实现的方法就是通过 PyPy ,Python 运行时与实时(JIT)编译器.与使用普通 ...

  3. awk,perl,python的命令行参数处理

    Python,Perl,Bash命令行参数 Part I 日常经常性的和Perl,Python,Bash打交道,但是又经常性的搞混他们之间,在命令行上的特殊性和index的区别,Python真的是人性 ...

  4. 百度快排发包python核心源码

    本源码仅供测试,发包有风险,优化还是踏实的好!本代码是本人自己学习python练手作品!  附上代码: # -*- coding: utf-8 -*-from selenium import webd ...

  5. 将基因组数据分类并写出文件,python,awk,R data.table速度PK

    由于基因组数据过大,想进一步用R语言处理担心系统内存不够,因此想着将文件按染色体拆分,发现python,awk,R 语言都能够非常简单快捷的实现,那么速度是否有差距呢,因此在跑几个50G的大文件之前, ...

  6. 利用Python进行数据分析-Pandas(第四部分-数据清洗和准备)

    在数据分析和建模的过程中,相当多的时间要用在数据准备上:加载.清理.转换以及重塑上.这些工作会占到分析时间的80%或更多.有时,存储在文件和数据库中的数据的格式不适合某个特定的任务.研究者都选择使用编 ...

  7. Python 学习手册, char 14 - 15

    Char 14 迭代器和解析器 可迭代的 : 支持iter的一个对象 迭代器  : iter 所返回的一个支持next(I)的对象 Python迭代工具会自动调用这些函数,我们也可以手动地应用迭代协议 ...

  8. 【Python大系】Python快速教程

    感谢原作者:Vamei 出处:http://www.cnblogs.com/vamei 怎么能快速地掌握Python?这是和朋友闲聊时谈起的问题. Python包含的内容很多,加上各种标准库.拓展库, ...

  9. python 数据处理学习pandas之DataFrame

    请原谅没有一次写完,本文是自己学习过程中的记录,完善pandas的学习知识,对于现有网上资料的缺少和利用python进行数据分析这本书部分知识的过时,只好以记录的形势来写这篇文章.最如果后续工作定下来 ...

随机推荐

  1. mybatis sql使用经验总结

    1.where 后面如果有动态sql,可以添加一个1=1条件,然后在后面添加动态sql语句,里面添加AND 例如: <select id="queryBizMonitorHistory ...

  2. Codeforces 894.D Ralph And His Tour in Binary Country

    D. Ralph And His Tour in Binary Country time limit per test 2.5 seconds memory limit per test 512 me ...

  3. 使用gulp进行css、js压缩

    var gulp = require('gulp'); var cleanCSS = require('gulp-clean-css'); var concatCss = require('gulp- ...

  4. python 学习笔记(十二) 文件和序列化

    python 文件读写和序列化学习.## python文件读写`1 打开并且读取文件` f = open('openfile.txt','r') print(f.read()) f.close() ` ...

  5. linux sort中文失效问题的解决

    http://note.youdao.com/noteshare?id=745488efb61a69fb56475e291863c94e

  6. discuz uc_server 配置登录

    新运行uc_server环境,先配置好ucenter链接-----这部很重要,我从新环境中安装下载的discuz代码,这部没配置,密码又不知道,怎么更改调试,都不起作用,在框架中,跳转到了原来线上的u ...

  7. 不管谁坐了CIO的位置 都必须了解的法则

    目前一些设立了CIO岗位的央企中,CIO也只做到了“IO”(信息官,Information Officer),而没有做到“C”(首席,Chief).老总们总在抱怨没有合适的人选:懂技术的不懂业务,懂业 ...

  8. 2017 Multi-University Training Contest - Team 1

    1006(6038) 就是对a,b分别求循环节,先统计一下b中所有长度循环节的出现次数,再对a求循环节时只要满足: a的循环节长度 % b的循环节长度=0,那么这个b的循环节就可以计入答案,尼玛只要是 ...

  9. Spring容器简介

    Spring 是面向 Bean 的编程(BOP,Bean Oriented Programming),提供了 IOC 容器通过配置文件或者注解的方式来管理对象之间的依赖关系. 控制反转模式(也称作依赖 ...

  10. 【POJ】3233 Matrix Power Series

    [算法]二分+矩阵快速幂 [题意]给定矩阵A和整数k,MOD,求A^0+A^1+A^2+...+A^k. [题解] 定义题目要求的答案为f(n),即: $$f_n=\sum_{i=0}^{n}A^i$ ...