java大數(shù)據(jù)和python大數(shù)據(jù)的全面對比,哪個更主流?
大數(shù)據(jù)是目前互聯(lián)網(wǎng)流行的技術(shù)語言,處理大數(shù)據(jù)的編程語言比較有優(yōu)勢的也很多,比如java、python、go、R語言、Hadoop等等,按道理來說每種編程語言都可以處理大數(shù)據(jù),只是處理的規(guī)模不一樣而且,但是現(xiàn)在比較受歡迎的數(shù)據(jù)處理編程語言是java與python。
java大數(shù)據(jù)與python大數(shù)據(jù)
說到j(luò)ava編程,java工程師一直都是同行的高薪崗位,而python是從最初的2016人工智能開始爆發(fā),從而在短短兩年之內(nèi)能趕超java。隨著python的發(fā)展,最大贏家無疑是python。未來大數(shù)據(jù)是對于一家企業(yè)有多重要,通過對數(shù)據(jù)的分析,可以了解市場需求、發(fā)展方向,對公司未來的定位,把數(shù)量龐大、不規(guī)整的數(shù)據(jù)信息進行梳理,總結(jié)出可供查詢的特征。

大數(shù)據(jù)必備技能
自從python熱度趕超java之后,python在大數(shù)據(jù)方面的優(yōu)勢逐漸被人們認識,但是java作為20多年成熟的編程語言,在大數(shù)據(jù)處理方面已存在已久,依然是程序員開發(fā)比較喜愛的編程。
java在大數(shù)據(jù)處理方面還是比較傾向軟件應(yīng)用與網(wǎng)站數(shù)據(jù),包括游戲數(shù)據(jù)處理,特別是金融服務(wù)數(shù)據(jù)處理,一直都是java的強項;python有著眾多免費科學(xué)算法庫,優(yōu)勢在人工智能大數(shù)據(jù)處理,當(dāng)然也有使用Python在銀行的基礎(chǔ)架構(gòu)中處理財務(wù)數(shù)據(jù)??梢哉fjava與python在大數(shù)據(jù)處理各有優(yōu)勢。
處理大規(guī)模數(shù)據(jù)時有那些常用的Python庫,他們有什么優(yōu)缺點?適用范圍如何?
王守崑 有意 NLP/對話機器人方向的朋友請聯(lián)系我
需要澄清兩點之后才可以比較全面的看這個問題:
1、百萬行級不算大數(shù)據(jù)量,以目前的互聯(lián)網(wǎng)應(yīng)用來看,大數(shù)據(jù)量的起點是10億條以上。
2. 處理的具體含義,如果是數(shù)據(jù)載入和分發(fā),用python是很高效的;如果是求一些常用的統(tǒng)計量和求一些基本算法的結(jié)果,python也有現(xiàn)成的高效的庫,C實現(xiàn)的和并行化的;如果是純粹自己寫的算法,沒有任何其他可借鑒的,什么庫也用不上,用純python寫是自討苦吃。
python的優(yōu)勢不在于運行效率,而在于開發(fā)效率和高可維護性。針對特定的問題挑選合適的工具,本身也是一項技術(shù)能力。
百萬級別數(shù)據(jù)是小數(shù)據(jù),python處理起來不成問題,python處理數(shù)據(jù)還是有些問題的
Python處理大數(shù)據(jù)的劣勢:
1、python線程有g(shù)il,通俗說就是多線程的時候只能在一個核上跑,浪費了多核服務(wù)器。在一種常見的場景下是要命的:并發(fā)單元之間有巨大的數(shù)據(jù)共享或者共用(例如大dict),多進程會導(dǎo)致內(nèi)存吃緊,多線程則解決不了數(shù)據(jù)共享的問題,單獨的寫一個進程之間負責(zé)維護讀寫這個數(shù)據(jù)不僅效率不高而且麻煩
2、python執(zhí)行效率不高,在處理大數(shù)據(jù)的時候,效率不高,這是真的,pypy(一個jit的python解釋器,可以理解成腳本語言加速執(zhí)行的東西)能夠提高很大的速度,但是pypy不支持很多python經(jīng)典的包,例如numpy(順便給pypy做做廣告,土豪可以捐贈一下PyPy - Call for donations)
3、絕大部分的大公司,用java處理大數(shù)據(jù)不管是環(huán)境也好,積累也好,都會好很多
Python處理數(shù)據(jù)的優(yōu)勢(不是處理大數(shù)據(jù)):
1、異常快捷的開發(fā)速度,代碼量巨少
2、豐富的數(shù)據(jù)處理包,不管正則也好,html解析啦,xml解析啦,用起來非常方便
3、內(nèi)部類型使用成本巨低,不需要額外怎么操作(java,c++用個map都很費勁)
4、公司中,很大量的數(shù)據(jù)處理工作工作是不需要面對非常大的數(shù)據(jù)的
5、巨大的數(shù)據(jù)不是語言所能解決的,需要處理數(shù)據(jù)的框架(hadoop, mpi。。。。)雖然小眾,但是python還是有處理大數(shù)據(jù)的框架的,或者一些框架也支持python
6、編碼問題處理起來太太太方便了
綜上所述:
1、python可以處理大數(shù)據(jù)
2、python處理大數(shù)據(jù)不一定是最優(yōu)的選擇
3. python和其他語言(公司主推的方式)并行使用是非常不錯的選擇
4. 因為開發(fā)速度,你如果經(jīng)常處理數(shù)據(jù),而且喜歡linux終端,而且經(jīng)常處理不大的數(shù)據(jù)(100m一下),最好還是學(xué)一下python
python數(shù)據(jù)處理的包:
1、自帶正則包, 文本處理足夠了
2、cElementTree, lxml 默認的xml速度在數(shù)據(jù)量過大的情況下不足
3、beautifulsoup 處理html
4、hadoop(可以用python) 并行處理,支持python寫的map reduce,足夠了, 順便說一下阿里巴巴的odps,和hadoop一樣的東西,支持python寫的udf,嵌入到sql語句中
5、numpy, scipy, scikit-learn 數(shù)值計算,數(shù)據(jù)挖掘
6、dpark(搬樓上的答案)類似hadoop一樣的東西
1,2,3,5是處理文本數(shù)據(jù)的利器(python不就處理文本數(shù)據(jù)方便嘛),4,6是并行計算的框架(大數(shù)據(jù)處理的效率在于良好的分布計算邏輯,而不是什么語言)
暫時就這些,最好說一個方向,否則不知