處理大數據的方法有不少,目前我知道就這麼多,後面會持續更新: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()返回迭代器: