处理大数据的方法有不少,目前我知道就这么多,后面会持续更新:python
1、将数据分批次读取
csv格式是常见的数据存储方式,对于咱们普通人而言易于读写。此外,在pandas中有pd.read_csv()函数能够将csv形式的数据进行读取。但当csv文件很是大的时候,直接读取会很吃内存,甚至会出现内存不够用的状况。网络
这时候咱们能够 分批次(分块)读取,而不是一次性读取 这么大致量的数据。操做步骤:多线程
- 分批次读取
- 处理每一批次
- 保存每一批次的结果
- 对全部的数据重复步骤1-3
- 将全部的批次结果都结合起来
pd.read_csv(chunksize)
中的chunksize指的的是每一批次的行数app
import pandas as pd chunk_iterator = pd.read_csv("test.vcf",sep="\t", chunksize=10000) chunk_result_list = [] #每一批次都是dataframe类型 for chunk in chunk_iterator: #根据你的分析问题,设计本身的chunk_manipulate函数 filter_result = chunk_manipulate(chunk) chunk_result_list.append(filter_result) #合并全部批次处理结果,造成新的dataframe df = pd.concat(chunk_result_list)
2、经常使用方法读取大型文件
面对100w行的大型数据,通过测试各类文件读取方式,得出结论:函数
with open(filename,"rb") as f: for fLine in f: pass
这种方式最快,100w行全遍历2.7秒。性能
基本知足中大型文件处理效率需求。若是rb改成r,慢6倍。可是此方式处理文件,fLine为bytes类型。可是python自行断行,仍旧能很好的以行为单位处理读取内容。测试
4、文本处理效率问题
这里举例ascii定长文件,由于这个也并非分隔符文件,因此打算采用列表操做实现数据分割。可是问题是处理20w条数据,时间急剧上升到12s。本觉得是byte.decode增长了时间。遂去除decode全程bytes处理。可是发现效率仍是不好。大数据
最后用最简单方式测试,首次运行,最简单方式也要7.5秒100w次。spa
那么关于python处理大文件的技巧,从网络整理三点:列表、文件属性、字典三个点来看看。线程
1.列表处理
def fun(x): 尽可能选择集合、字典数据类型,千万不要选择列表,列表的查询速度会超级慢,一样的,在已经使用集合或字典的状况下,不要再转化成列表进行操做,好比:
2. 对于文件属性
若是遇到某个文件,其中有属性相同的,但又不能进行去重操做,没有办法使用集合或字典时,能够增长属性,好比将原数据从新映射出一列计数属性,让每一条属性具备惟一性,从而能够用字典或集合处理:
3. 对于字典
多使用iteritems()少使用items(),iteritems()返回迭代器: