Python處理大資料

2021-09-07 15:23:25 字數 1459 閱讀 3691

起因

python處理一下資料,大概有六七個g,然後再存到另外乙個檔案中,單執行緒跑起來發現太慢了,資料總量大概是千萬行的級別,然後每秒鐘只能處理不到20行……遂想怎麼提高一下速度

嘗試1-multiprocessing

**如下:

from multiprocessing.dummy import pool as threadpool

pool = threadpool(20)

pool.map(func_name, args)

pool.close()

pool.join()

這裡參考了這篇文章,然後嘗試了一下,發現速度並沒有多少提示,看了一下資源使用率,只佔滿了1個核,不能滿足要求

嘗試2-dask

**如下:

from dask import delayed

import dask.bag as db

l =

for fn in encrypt_files:

b = db.read_text(fn)

a = delayed(decrypt_file)(fn) # delay execution of function

result = delayed(l)

result.compute()

這個地方參考了這篇文章,但是嘗試了一下,還是只跑了乙個核,依然失敗

嘗試3-pp

**如下:

cpu_num = 1

job_server = pp.server(cpu_num)

a =

for f in fn:

for x in a:

tmp = x()

這裡參考這篇文章,測試了一下,可以跑滿多個核心,其使用的cpu核心數量就是設定的那個數量。

但是也存在乙個問題,就是程式跑一段時間後就會效率下降,監控一下cpu發現也只剩下乙個核心在跑了,目前還不知道是什麼原因,也沒有深究

對比平時最常有的應該是multiprocessing模組,網上的資料大多也都是這個,做資料分析的可能dask模組會用到,pp模組就更少了。但是實際上在我這裡測試,前兩者達不到我的要求,其最多也跑了乙個核心,不知道是不是我**使用的問題。

至於pp模組,需要注意的是全域性變數的定義,可能需要在函式裡重新定義,不然可能會提示變數未定義的錯誤。

過程其實最終也沒有達到我的要求,還存在著一部分問題,可能最終還是需要靠集群去實現這個方案。

感想圍觀v2的帖子,發現其實找出瓶頸才是最關鍵的…最終發現我的瓶頸是在處理資料的部分,rsa解密太耗時了,然後就應該考慮怎麼提高這部分效率。

有人說換語言,實際上提高十倍也並不滿足這個要求,可能提高十倍效率同時使用多核心可以滿足…這個時候就該考慮換個思路了

比方說用集群(還未實現),或則說直接換語言,同時跑多核心。

ps感謝各位熱心網友

python多程序處理大資料

主要用到multiprocessing庫,思想是將大資料讀入記憶體,然後切片儲存,然後多程序分別處理分片。from multiprocessing import pool import math import os 讀取資料 path os.path.join os.getcwd test.txt ...

python 大資料處理小結

1.shop min shop.drop category id longitude latitude price axis 1 pandas中刪除多個列 2.mall shop min.drop duplicates subset mall id pandas中將某一列去重 3.python寫檔案...

Vaex處理大資料的Python庫

隨著社會的發展,5g和雲技術的普及,資料也越來越方便蒐集儲存。隨之而來的就是資料越來越大,資料科學家面對 50gb 甚至 500gb 大小的資料集的情況變得越來越普遍。海量資料的處理也變的越來困難和重要。本文推薦處理大資料的乙個python庫,vaex。vaex 是乙個開源的資料框架庫 類似於pan...