【Python开发】Python 适合大数据量的处理吗?
生活随笔
收集整理的這篇文章主要介紹了
【Python开发】Python 适合大数据量的处理吗?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Python 適合大數據量的處理嗎?
python 能處理數據庫中百萬行級的數據嗎?處理大規模數據時有那些常用的python庫,他們有什么優缺點?適用范圍如何?
需要澄清兩點之后才可以比較全面的看這個問題:
1. 百萬行級不算大數據量,以目前的互聯網應用來看,大數據量的起點是10億條以上。
2. 處理的具體含義,如果是數據載入和分發,用python是很高效的;如果是求一些常用的統計量和求一些基本算法的結果,python也有現成的高效的庫,C實現的和并行化的;如果是純粹自己寫的算法,沒有任何其他可借鑒的,什么庫也用不上,用純python寫是自討苦吃。
python的優勢不在于運行效率,而在于開發效率和高可維護性。針對特定的問題挑選合適的工具,本身也是一項技術能力。
我很喜歡用python,用python處理數據是家常便飯,從事的工作涉及nlp,算法,推薦,數據挖掘,數據清洗,數據量級從幾十k到幾T不等,我來說說吧
百萬級別數據是小數據,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是并行計算的框架(大數據處理的效率在于良好的分布計算邏輯,而不是什么語言)
暫時就這些,最好說一個方向,否則不知道處理什么樣的數據也不好推薦包,所以沒有頭緒從哪里開始介紹這些包
這要看具體的應用場景,從本質上來說,我們把問題分解為兩個方面:
1、CPU密集型操作
即我們要計算的大數據,大部分時間都在做一些數據計算,比如求逆矩陣、向量相似度、在內存中分詞等等,這種情況對語言的高效性非常依賴,Python做此類工作的時候必然性能低下。
2、IO密集型操作
假如大數據涉及到頻繁的IO操作,比如從數據流中每次讀取一行,然后不做什么復雜的計算,頻繁的輸入輸出到文件系統,由于這些操作都是調用的操作系統接口,所以用什么語言已經不在重要了。
結論
用Python來做整個流程的框架,然后核心的CPU密集操作部分調用C函數,這樣開發效率和性能都不錯,但缺點是對團隊的要求又高了(尤其涉及到Python+C的多線程操作)...所以...魚與熊掌不可兼得。如果一定要兼得,必須得自己牛逼。
我們公司每天處理數以P記的數據,有個并行grep的平臺就是python做的。當初大概是考慮快速成型而不是極限速度,但是事實證明現在也跑得杠杠的。大數據很多時候并不考慮太多每個節點上的極限速度,當然速度是越快越好,但是再更高層次做優化(比如利用data locality減少傳輸,建索引快速join,做sample優化partition,用bloomfilter快速測試等等),把python換成C并不能很大程度上提升效率。
很多python庫的實現都是用其他語言寫的(C比較多),只是用Python做了個包裝而已。庫的效率本身不低。
碼代碼比程序時間復雜度更cost
很多機器學習,神經網絡,數據計算的算法已經存在幾十年了,這些零零散散的工具多被C和Fortran實現,直到有人開始用Python把這些工具集合到一起,所以,表面上是在用Python的庫,實際上是C和Fortran的程序,性能上也并無大的影響,如果你真的是大數據的話
大量數據處理的瓶頸是在IO,而不是在哪個語言。語言選擇真的是要看個人口味、品味。
流處理是python最大軟肋
使用python可以,但對速度要求較高的關鍵模塊,還是要用C重寫。
Python調用vtk庫對面片數量我測試過是沒有限制的好像,你所說的100萬多數據是不是都是存入了python的list中,list是有上限限制的。如果不存入list,應該是沒有渲染上限的。
求python在大數據環境下高效編程的方法。
在spark集群下,我對對原來scala程序進行python重寫。對過億行級數據進行數據清洗整合操作。從執行任務的時間來看,scala執行效率比python重寫程序高好多倍。
使用Python調用vtk庫對100萬行的數據進行可視化,結果內存爆滿,使用C++就沒有問題,Python很占內存,不知道為什么……
什么叫處理? 100萬的數據,如果只是傳輸的話,python和c/c++差不多;如果用來計算話題模型的話,python的速度為c/c++的1/10,內存消耗為10倍多。
轉載于:https://www.cnblogs.com/huty/p/8517936.html
總結
以上是生活随笔為你收集整理的【Python开发】Python 适合大数据量的处理吗?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阅读 LdrInitializeThun
- 下一篇: 创建加密应用程序