Hadoop_java與python的關(guān)系
python 是一門動(dòng)態(tài)語(yǔ)言,
hadoop是一個(gè)分布式計(jì)算的框架, 是用java寫(xiě)的。
他們是兩個(gè)層次的東西。
如果說(shuō)非要有聯(lián)系, 就是python可以應(yīng)用hadoop框架, 做分布式計(jì)算的開(kāi)發(fā)。
但是語(yǔ)言和框架, 是可以自己拼裝的。 java也可以使用hadoop開(kāi)發(fā)分布式計(jì)算,
python也可以用spark開(kāi)發(fā)分布式計(jì)算,可以自己根據(jù)需求搭配
?
?
java與python區(qū)別:
一、python虛擬機(jī)沒(méi)有java強(qiáng),java虛擬機(jī)是java的核心,python的核心是可以很方便地使用c語(yǔ)言函數(shù)或c++庫(kù)。
二、python是全動(dòng)態(tài)性的,可以在運(yùn)行時(shí)自己修改自己的代碼,java只能通過(guò)變通方法實(shí)現(xiàn)。python的變量是動(dòng)態(tài)的,而java的變量是靜態(tài)的,需要事先聲明,所以java ide的代碼提示功能優(yōu)于python ide。
三,python的產(chǎn)生幾十年了,幾十年前面向過(guò)程是主流,所以用python有好多程序用的是面向過(guò)程設(shè)計(jì)方法,很多概念從c語(yǔ)言過(guò)來(lái)的,class在python中是后加入的,而java是為了實(shí)現(xiàn)沒(méi)有指針的c++(當(dāng)年com組件用的引用記數(shù),java用的虛擬機(jī)),主要采用面向?qū)ο蟮脑O(shè)計(jì)方法,很多概念是oop的概念。面向過(guò)程,相對(duì)簡(jiǎn)潔直觀,但容易設(shè)計(jì)出面條程序,面向?qū)ο螅鄬?duì)抽象優(yōu)雅,但容易過(guò)度抽象。
四,在實(shí)際使用的python入門簡(jiǎn)單,但要學(xué)會(huì)用python干活,需要再學(xué)習(xí)python各種庫(kù),pyhton的強(qiáng)大在于庫(kù),為什么python的庫(kù)強(qiáng)大,原因是python的庫(kù)可以用python,c語(yǔ)言,c++等設(shè)計(jì),再提供給python使用,所以無(wú)論gpu運(yùn)行,神經(jīng)網(wǎng)絡(luò),智能算法,數(shù)據(jù)分析,圖像處理,科學(xué)計(jì)算,各式各樣的庫(kù)在等著你用。而java沒(méi)有python那么多的開(kāi)源庫(kù),很多庫(kù)是商業(yè)公司內(nèi)部使用,或發(fā)布出來(lái)只是一個(gè)jar包,看不到原始代碼。python虛擬機(jī)因?yàn)榫幾g性沒(méi)有java的支持的好(或者說(shuō)故意這么設(shè)計(jì)的),一般直接使用源碼(linux),或源碼簡(jiǎn)單打個(gè)包(如pyexe)。
五、python有很多虛擬機(jī)實(shí)現(xiàn),如cython,Pyston,pypy,jython, IronPython等等,適合用于業(yè)務(wù)語(yǔ)言,或插件語(yǔ)言,或面向領(lǐng)域語(yǔ)言,而java因?yàn)樘摂M機(jī)巨大,很少用于插件語(yǔ)言,發(fā)布也不方便。
六、java主要用于商業(yè)邏輯強(qiáng)的領(lǐng)域,如商城系統(tǒng),erp,oa,金融,保險(xiǎn)等傳統(tǒng)數(shù)據(jù)庫(kù)事務(wù)領(lǐng)域,通過(guò)類似ssh框架事務(wù)代碼,對(duì)商業(yè)數(shù)據(jù)庫(kù),如oralce,db2,sql server等支持較好,軟件工程理念較強(qiáng),適合軟件工程式的多人開(kāi)發(fā)模式。python主要用于web數(shù)據(jù)分析,科學(xué)計(jì)算,金融分析,信號(hào)分析,圖像算法,數(shù)學(xué)計(jì)算,統(tǒng)計(jì)分析,算法建模,服務(wù)器運(yùn)維,自動(dòng)化操作,快速開(kāi)發(fā)理念強(qiáng),適合快速開(kāi)發(fā)團(tuán)隊(duì)或個(gè)人敏捷模式。
七、java的商業(yè)化公司支持多,如sap,oracle,ibm等,有商業(yè)化的容器,中間件,企業(yè)框架ejb。python的開(kāi)源組織支持多,如qt,linux,google,很多開(kāi)源程序都支持python, 如pyqt,redis,spark等。
八、python用途最多的是腳本,java用途最多的是web,pyhotn是膠水,可以把各類不相關(guān)的東西粘在一起用,java是基佬,可以通過(guò)軟件工程組成幾百個(gè)人的團(tuán)隊(duì)和你pk,商業(yè)化氣息重。不過(guò)我認(rèn)為還是python強(qiáng)大,因?yàn)榭梢苑奖阏{(diào)用c或c++的庫(kù),但軟件工程和商業(yè)化運(yùn)作沒(méi)有java好,適合快捷開(kāi)發(fā)。
九,關(guān)于錢。
如果你想寫(xiě)程序賣軟件用java,可用上ibm服務(wù)器,上oracle數(shù)據(jù)庫(kù),上EMC存儲(chǔ),價(jià)格高,商業(yè)采購(gòu)公司喜歡這種高大上。如果你要直接用程序生成金錢用python,python可以實(shí)現(xiàn)寬客金融,數(shù)據(jù)回測(cè),炒股,炒期權(quán),炒黃金,炒比特幣,對(duì)沖套利,統(tǒng)計(jì)套利,有很多開(kāi)源庫(kù),數(shù)據(jù)分析庫(kù),機(jī)器學(xué)習(xí)庫(kù)可以參考。
十、java和python,都可以運(yùn)行于linux操作系統(tǒng),但很多l(xiāng)inux可以原生支持python,java需要自行安裝。java和python強(qiáng)于c#的原因大于支持linux,支持osx,支持unix,支持arm。java和python比c++受歡迎的原因在于不需要指針。
十一、對(duì)于移動(dòng)互聯(lián)網(wǎng),python只能通過(guò)運(yùn)行庫(kù)運(yùn)行于安卓或ios,java原生支持安卓開(kāi)發(fā),但不能用ios中。
十二、對(duì)于大數(shù)據(jù),hadoop用java開(kāi)的, spark用Scala開(kāi)發(fā),用python調(diào)用spark再分析更方便。
?
通俗的來(lái)說(shuō)就是如下幾點(diǎn)
1. Python比Java簡(jiǎn)單,學(xué)習(xí)成本低,開(kāi)發(fā)效率高
2.Java運(yùn)行效率高于Python,尤其是純Python開(kāi)發(fā)的程序,效率極低
4.Java版本比較穩(wěn)定,Python2和3不兼容導(dǎo)致大量類庫(kù)失效
5.Java開(kāi)發(fā)偏向于軟件工程,團(tuán)隊(duì)協(xié)同,Python更適合小型開(kāi)發(fā)
6.Java偏向于商業(yè)開(kāi)發(fā),Python適合于數(shù)據(jù)分析
7.Java是一種靜態(tài)類型語(yǔ)言,Python是一種動(dòng)態(tài)類型語(yǔ)言
8.Java中的所有變量需要先聲明(類型)才能使用,Python中的變量不需要聲明類型
9.Java編譯以后才能運(yùn)行,Python直接就可以運(yùn)行;
10.JAVA 里的塊用大括號(hào)對(duì)包括,Python 以冒號(hào) + 四個(gè)空格縮進(jìn)表示。
11.JAVA 的類型要聲明,Python 的類型不需要。
12.JAVA 每行語(yǔ)句以分號(hào)結(jié)束,Python 可以不寫(xiě)分號(hào)。
13.實(shí)現(xiàn)同一功能時(shí),JAVA 要敲的鍵盤次數(shù)一般要比 Python 多。
一些細(xì)節(jié)區(qū)別:
1.數(shù)
python只有四種數(shù)據(jù):整數(shù),長(zhǎng)整數(shù)、浮點(diǎn)數(shù)和復(fù)數(shù)
java則有char,short,byte,int,long,float,double類型
2. 字符串
2.1. 字符串表示
Python中沒(méi)有表示單個(gè)常量字符串類型的char類型,其可以用單引號(hào)‘ ’或雙引號(hào)“ ”來(lái)表示一個(gè)字符串,也可以用三引號(hào)來(lái)表示一個(gè)多行字符串
Java中char表示單個(gè)字符,String表示一個(gè)字符串,常量字符或字符串用雙引號(hào)“ ”表示
2.2. 多行字符串
Python在字符串末尾加上反斜杠(/)表示字符串在下一行繼續(xù)
Java用加號(hào)(+)表示字符串在下一行繼續(xù)
2.3. Python中其它的表示方法
Python中還有可以在字符串前加前綴r或R:表示自然字符串,即不對(duì)字符串做轉(zhuǎn)移處理比java方便
Python可以加前綴u或U:表示unicode字符串
注意: Python 中的__init__()方法類似與Java中的構(gòu)造函數(shù),Java構(gòu)造函數(shù)中的self默認(rèn)存在,不需要在構(gòu)造函數(shù)聲明的時(shí)候進(jìn)行顯示指明,但是Python需要在__init__()函數(shù)中顯示指明(但是ID調(diào)用時(shí)不用顯示進(jìn)行self傳遞)。
3. 操作符
Python中**表示冪計(jì)算,如果 X**y表示 Xy
Python中//表示整除,即商的整數(shù)部分
Python中~表示按位翻轉(zhuǎn),~x就是-(x+1)
4. 對(duì)象的序列化表示
Python中可以使用str()或repr()函數(shù)來(lái)實(shí)現(xiàn)對(duì)象的序列化
Java中通過(guò)toString()方法來(lái)實(shí)現(xiàn)對(duì)象的序列化
Hadoop簡(jiǎn)介
Hadoop是一個(gè)由Apache基金會(huì)所開(kāi)發(fā)的分布式系統(tǒng)基礎(chǔ)架構(gòu)。
用戶可以在不了解分布式底層細(xì)節(jié)的情況下,開(kāi)發(fā)分布式程序。充分利用集群的威力進(jìn)行高速運(yùn)算和存儲(chǔ)。
Hadoop實(shí)現(xiàn)了一個(gè)分布式文件系統(tǒng)(Hadoop Distributed File System),簡(jiǎn)稱HDFS。HDFS有高容錯(cuò)性的特點(diǎn),并且設(shè)計(jì)用來(lái)部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)來(lái)訪問(wèn)應(yīng)用程序的數(shù)據(jù),適合那些有著超大數(shù)據(jù)集(large data set)的應(yīng)用程序。HDFS放寬了(relax)POSIX的要求,可以以流的形式訪問(wèn)(streaming access)文件系統(tǒng)中的數(shù)據(jù)。
Hadoop的框架最核心的設(shè)計(jì)就是:HDFS和MapReduce。HDFS為海量的數(shù)據(jù)提供了存儲(chǔ),則MapReduce為海量的數(shù)據(jù)提供了計(jì)算。
Java簡(jiǎn)介
Java是一門面向?qū)ο?a target="_blank">編程語(yǔ)言,不僅吸收了C++語(yǔ)言的各種優(yōu)點(diǎn),還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語(yǔ)言具有功能強(qiáng)大和簡(jiǎn)單易用兩個(gè)特征。Java語(yǔ)言作為靜態(tài)面向?qū)ο缶幊陶Z(yǔ)言的代表,極好地實(shí)現(xiàn)了面向?qū)ο罄碚摚试S程序員以優(yōu)雅的思維方式進(jìn)行復(fù)雜的編程。
Java具有簡(jiǎn)單性、面向?qū)ο蟆⒎植际健⒔研浴踩浴⑵?**立與可移植性、多線程、動(dòng)態(tài)性等特點(diǎn)。Java可以編寫(xiě)桌面應(yīng)用程序、Web應(yīng)用程序、分布式系統(tǒng)和嵌入式系統(tǒng)應(yīng)用程序等。
Python簡(jiǎn)介
是一種面向?qū)ο蟮慕忉屝陀?jì)算機(jī)程序設(shè)計(jì)語(yǔ)言,由荷蘭人Guido van Rossum于1989年發(fā)明,第一個(gè)公開(kāi)發(fā)行版發(fā)行于1991年。
Python是純粹的自由軟件, 源代碼和解釋器CPython遵循 GPL(GNU General Public License)協(xié)議 。Python語(yǔ)法簡(jiǎn)潔清晰,特色之一是強(qiáng)制用空白符(white space)作為語(yǔ)句縮進(jìn)。
Python 適合的領(lǐng)域:
1. Web網(wǎng)站和各種網(wǎng)絡(luò)服務(wù);
2. 系統(tǒng)工具和腳本;
3. 作為“膠水”語(yǔ)言把其他語(yǔ)言開(kāi)發(fā)的模塊包裝起來(lái)方便使用;
Python 和其他語(yǔ)言對(duì)比:
1. C 編譯為機(jī)器碼,運(yùn)行速度非常快,代碼量非常多;
2. Java 編譯為字節(jié)碼,運(yùn)行速度快,代碼量多;
3. Python解釋執(zhí)行,運(yùn)行速度慢,代碼量少;
Python基本語(yǔ)法:
和java不同,不需要方法加 { } 定義決定一個(gè)代碼塊,Python對(duì)代碼縮進(jìn)控制嚴(yán)格,基本可以通過(guò)縮進(jìn)決定代碼塊。
關(guān)于變量:
1. 定義:無(wú)需聲明類型,且必須賦值;
2. 使用范圍:在變量前加兩個(gè)下劃線如:__content = “haha”代表該類變量私有,不加則默認(rèn)公有.
?
評(píng)論
查看更多