Python 適合大數據量的處理嗎?

Python是著名膠水語言,Python的庫很多都是c語言寫的,比如極其著名的numpy,效率根本不是問題。用Python+第三方庫,可以兼顧運行效率和開發效率,是非常好的選擇。再說現在最熱門的深度學習和人工智能,基本都是Python和c++的天下,沒有java這種低不成高不就的語言什麼事。

需要澄清兩點之後纔可以比較全面的看這個問題:

1. 百萬行級不算大數據量,以目前的互聯網應用來看,大數據量的起點是10億條以上。
2. 處理的具體含義,如果是數據載入和分發,用python是很高效的;如果是求一些常用的統計量和求一些基本算法的結果,python也有現成的高效的庫,C實現的和並行化的;如果是純粹自己寫的算法,沒有任何其他可借鑑的,什麼庫也用不上,用純python寫是自討苦喫。

python的優勢不在於運行效率,而在於開發效率和高可維護性。針對特定的問題挑選合適的工具,本身也是一項技術能力。
 百萬級別數據是小數據,python處理起來不成問題,python處理數據還是有些問題的
Python處理大數據的劣勢:
1. python線程有gil,通俗說就是多線程的時候只能在一個核上跑,浪費了多核服務器。在一種常見的場景下是要命的:併發單元之間有巨大的數據共享或者共用(例如大dict),多進程會導致內存喫緊,多線程則解決不了數據共享的問題,單獨的寫一個進程之間負責維護讀寫這個數據不僅效率不高而且麻煩
2. python執行效率不高,在處理大數據的時候,效率不高,這是真的,pypy(一個jit的python解釋器,可以理解成腳本語言加速執行的東西)能夠提高很大的速度,但是pypy不支持很多python經典的包,例如numpy(順便給pypy做做廣告,土豪可以捐贈一下PyPy - Call for donations
3. 絕大部分的大公司,用java處理大數據不管是環境也好,積累也好,都會好很多
Python處理數據的優勢(不是處理大數據):
1. 異常快捷的開發速度,代碼量巨少
2. 豐富的數據處理包,不管正則也好,html解析啦,xml解析啦,用起來非常方便
3. 內部類型使用成本巨低,不需要額外怎麼操作(java,c++用個map都很費勁)
4. 公司中,很大量的數據處理工作工作是不需要面對非常大的數據的
5. 巨大的數據不是語言所能解決的,需要處理數據的框架(hadoop, mpi。。。。)雖然小衆,但是python還是有處理大數據的框架的,或者一些框架也支持python
6. 編碼問題處理起來太太太方便了

綜上所述:
1. python可以處理大數據
2. python處理大數據不一定是最優的選擇
3. python和其他語言(公司主推的方式)並行使用是非常不錯的選擇
4. 因爲開發速度,你如果經常處理數據,而且喜歡linux終端,而且經常處理不大的數據(100m一下),最好還是學一下python

python數據處理的包:
1. 自帶正則包, 文本處理足夠了
2. cElementTree, lxml 默認的xml速度在數據量過大的情況下不足
3. beautifulsoup 處理html
4. hadoop(可以用python) 並行處理,支持python寫的map reduce,足夠了, 順便說一下阿里巴巴的odps,和hadoop一樣的東西,支持python寫的udf,嵌入到sql語句中
5. numpy, scipy, scikit-learn 數值計算,數據挖掘
6. dpark(搬樓上的答案)類似hadoop一樣的東西

1,2,3,5是處理文本數據的利器(python不就處理文本數據方便嘛),4,6是並行計算的框架(大數據處理的效率在於良好的分佈計算邏輯,而不是什麼語言)
暫時就這些,最好說一個方向,否則不知道處理什麼樣的數據也不好推薦包,所以沒有頭緒從哪裏開始介紹這些包

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章