導航:首頁 > 編程語言 > 利用scala語言開發spark應用程序

利用scala語言開發spark應用程序

發布時間:2024-04-05 01:30:06

『壹』 濡備綍鎴愪負Spark楂樻墜

銆絎涓闃舵碉細鐔熺粌鎺屾彙Scala璇璦
1錛宻park妗嗘灦鏄閲囩敤scala璇璦鍐欑殑錛岀簿鑷翠紭闆呫傛兂瑕佹垚涓簊park楂樻墜錛屼綘灝卞繀欏婚槄璇籹park婧愮爜錛屽氨蹇呴』鎺屾彙scala銆
2錛岃櫧鐒剁幇鍦ㄧ殑spark鍙浠ヤ嬌鐢ㄥ氱嶈璦寮鍙戱紝java,python錛屼絾鏄鏈蹇閫熷拰鏀鎸佹渶濂界殑API渚濈劧騫跺皢姘歌繙鏄瘲cala鐨凙PI錛屾墍浠ュ繀欏繪帉鎻scala鏉ョ紪鍐欏嶆潅鐨勫拰楂樻ц兘鐨剆park鍒嗗竷寮忕▼搴忋
3灝ゅ叾鏄鐔熺粌鎺屾彙Scala鐨則rait,apply,鍑芥暟寮忕紪紼嬶紝娉涘瀷錛岄嗗彉錛屼笌鍗忓彉絳夈
銆銆絎浜岄樁孌碉細綺鵑歴park騫沖彴鏈韜鎻愪緵緇欏紑鍙戞姌鐨凙PI
1錛屾帉鎻spark涓闈㈠悜RDD鐨勫紑鍙戞ā寮忥紝鎺屾彙鍚勭峵ransformation鍜宎ction鍑芥暟鐨勪嬌鐢ㄣ
2錛屾帉鎻Spark涓鐨勬句緷璧栧拰紿勪緷璧栵紝lineage鏈哄埗銆
3錛屾帉鎻RDD鐨勮$畻嫻佺▼錛屽係tage鐨勫垝鍒嗭紝spark搴旂敤紼嬪簭鎻愪氦緇欓泦緹ょ殑鍩虹榪囩▼鍜學ork鑺傜偣鍩虹鐨勫伐浣滃師鐞嗐
銆絎涓夐樁孌碉細娣卞叆Spark鍐呮牳
姝ら樁孌典富瑕佹槸閫氳繃Spark妗嗘灦鐨勬簮鐮佺爺璇繪潵娣卞叆Spark鍐呮牳閮ㄥ垎錛
1錛岄氳繃婧愮爜鎺屾彙Spark鐨勪換鍔℃彁浜わ紝
2錛岄氳繃婧愮爜鎺屾彙Spark鐨勯泦緹ょ殑浠誨姟璋冨害錛
3錛屽挨鍏惰佺簿閫欴AGScheler,TaskScheler鍜學orker鑺傜偣鍐呴儴鐨勫伐浣滅殑姣忎竴姝ョ粏鑺傘
銆銆絎鍥涢樁孌碉細鎺屾彙Spark涓婄殑鏍稿績妗嗘灦鐨勪嬌鐢
Spark浣滀負浜戣$畻澶ф暟鎹鏃朵唬鐨勯泦澶ф垚鑰咃紝鍦ㄥ疄鏃舵祦寮忓勭悊錛屽浘鎶鏈錛屾満鍣ㄥ︿範錛宯osql鏌ヨ㈢瓑鏂歸潰鍏鋒湁鏄庢樉鐨勪紭鍔匡紝鎴戜滑浣跨敤Spark鐨勬椂鍊欏ぇ閮ㄥ垎鏃墮棿閮芥槸鍦ㄤ嬌鐢ㄥ叾妗嗘灦錛
sparksql,spark streaming絳
1錛宻park streaming鏄鍑鴻壊鐨勫疄鏃舵祦澶卞勭悊妗嗘灦錛岃佹帉鎻★紝DStream,transformation鍜宑heckpoint絳夈
2錛宻park sql鏄紱葷嚎緇熻″垎鏋愬伐鍏鳳紝shark宸茬粡娌¤惤銆
3錛屽逛簬spark涓鐨勬満鍣ㄥ︿範鍜孏raphx絳夎佹帉鎻″叾鍘熺悊鍜岀敤娉曘
銆絎浜旈樁孌碉細鍋氬晢涓氱駭鐨剆park欏圭洰
閫氳繃涓涓瀹屾暣鐨勫叿鏈変唬琛ㄦх殑spark欏圭洰鏉ヨ瘡絀縮park鐨勬柟鏂歸潰闈錛屽寘鎷欏圭洰鐨勬嗘灦璁捐★紝鐢ㄥ埌鐨勬妧鏈鐨勫墫鏋愶紝寮濮嬪疄鐜幫紝榪愮淮絳夛紝瀹屽杽鎺屾彙鍏朵腑鐨勬瘡涓涓闃舵靛拰緇嗚妭錛屼互鍚庝綘灝卞彲浠ヤ粠瀹圭殑闈㈠圭粷澶у氭暟spark欏圭洰銆
銆絎鍏闃舵碉細鎻愪緵spark瑙e喅鏂規
1錛屽交搴曟帉鎻spark妗嗘灦婧愮爜鐨勬瘡涓涓緇嗚妭錛
2錛屾牴鎹姝ュ悓鐨勪笟鍔″満鏅鐨勯渶瑕佹彁渚泂park鍦ㄤ笉鍚屽満鏅鐨勮В鍐蟲柟妗堬紝
3錛屾牴鎹瀹為檯闇瑕侊紝鍦╯park妗嗘灦鍩虹涓婄粡琛2嬈″紑鍙戱紝鎵撻犺嚜宸辯殑spark妗嗘灦銆

『貳』 Spark浣跨敤鐨勮璦鏄浠涔堬紵

Spark鐨勬嗘灦浣跨敤Scala璇璦緙栧啓鐨勶紝綆媧佽屼紭闆咃紱
Spark鐨勫紑鍙戠洰鍓嶄富瑕佸彲浠ヤ嬌鐢ㄤ笁縐嶈璦錛歋cala銆丣ava銆丳ython

『叄』 Spark 涓鐢 Scala 鍜 java 寮鍙戞湁浠涔堝尯鍒

Scala鍒板簳鏄浠涔?鍦ㄧ洰鍓嶄紬澶氱殑JVM璇璦褰撲腑錛孲cala鏃犵枒鏄鏈寮曚漢娉ㄦ剰鐨勮璦涔嬩竴銆係cala鏄涓涓闈欐佽璦錛屾洿閫傚悎澶у瀷宸ョ▼欏圭洰錛孲cala鐩存帴緙栬瘧鎴怞ava瀛楄妭鐮侊紝鎬ц兘鎺ヨ繎Java銆係cala鏄涓涓澶氳寖寮忕殑璇璦錛屼綘鍙浠ユ販鍚堜嬌鐢ㄥ嚱鏁板紡鍜岄潰鍚戝硅薄緙栫▼錛屾販鍚堜嬌鐢ㄥ彲鍙樼被鍜屼笉鍙樼被錛屾販鍚堜嬌鐢ˋctor鍜屼紶緇熺殑Java騫跺彂搴撱
鐭鐭涓涓鏈堢殑鏃墮棿錛孲cala浜庢湰鏈堝啿榪涗簡TIOBE鐨勫墠浜斿嶮鍚嶃備竴涓 Twitter 鐨勫紑鍙戜漢鍛樿磋繃錛孲cala 灝嗕細鎴愪負鐜頒唬 Web2.0 鐨勫彂璧瘋璦銆侺inkedIn 涔熺敤榪欑嶈璦銆傚悓鏍瘋稿氬叾浠栧ぇ鐨勫叕鍙稿 Sony Picture, EDF, SAP 涔熷紑濮嬩嬌鐢ㄨ繖縐嶈璦銆備負浠涔圫cala鍙戝睍榪欎箞榪呯寷錛屽彲浠ヨ幏寰楀傛ょ儹鐑堢殑紺懼尯鏀鎸併
鏇懼啝涓滆繕琛ㄧず錛孲cala涓嶆槸Java鐨勬潃鎵嬶紝瀹冩棤娉曞彇浠Java鐨勫湴浣嶏紝涔熺獊鐮翠笉浜咼VM鐨勯檺鍒躲丣ava瀹炵幇涓嶄簡鐨勫姛鑳藉畠涔熷疄鐜頒笉浜嗐傛垜浠鍙浠ュ皢Scala褰㈣薄鐨勭悊瑙f垚澶ч噺璇娉曠硸鐨凧ava銆
Scala 寮鍙戝洟闃熷彂甯冧簡鏈鏂扮殑2.9.2紼沖畾鐗堟湰錛孲cala 璇璦鐨勭壒鎬ф湁璁稿氾紝渚嬪傞珮闃跺嚱鏁板拰瀵硅薄銆佹娊璞$被鍨嬬粦瀹氾紝actor 浣垮緱鍑芥暟鍦 Scala 涓鑳芥槸涓涓瀛愮被鎴愪負鍙鑳斤紝Scala 涓鐨勮捐℃ā寮忎嬌寰楅潰鍚戝硅薄鍜屽嚱鏁扮紪紼嬫棤緙濈粨鍚堛侫kka 鏄涓涓鐢 Scala 緙栧啓鐨勫簱錛岀敤浜庣畝鍖栫紪鍐欏歸敊鐨勩侀珮鍙浼哥緝鎬х殑 Java 鍜 Scala 鐨 Actor 妯″瀷搴旂敤銆傚畠宸茬粡鎴愬姛榪愮敤鍦ㄧ數淇¤屼笟銆係park 鏄涓縐嶅彲鎵╁睍鐨勬暟鎹鍒嗘瀽騫沖彴錛屽畠鏁村悎浜嗗唴瀛樿$畻鐨勫熀鍏冿紝鍥犳わ紝鐩稿逛簬 Hadoop 鐨勯泦緹ゅ瓨鍌ㄦ柟娉曪紝瀹冨湪鎬ц兘鏂歸潰鏇村叿浼樺娍銆係park 鏄鍦 Scala 璇璦涓瀹炵幇鐨勶紝騫朵笖鍒╃敤浜嗚ヨ璦錛屼負鏁版嵁澶勭悊鎻愪緵浜嗙嫭涓鏃犱簩鐨勭幆澧冦係cala 緙栬瘧鍣ㄥ彲浠ョ敓鎴愬瓧鑺傜爜錛岀洿鎺ヨ繍琛屽湪浣跨敤JVM涓娿傝ヨ璦(瀹冨疄闄呬笂浠h〃浜嗗彲鎵╁睍璇璦)琚瀹氫箟涓哄彲鐩存帴闆嗘垚鍒拌璦涓鐨勭畝鍗曟墿灞曘
Scala浣滀負涓闂ㄩ潤鎬佽璦錛屽畠鐨勪富瑕佺壒鎬ф湁鍝浜?
路 Scala鏄闈㈠悜瀵硅薄鐨
Scala鏄涓涓綰闈㈠悜瀵硅薄璇璦錛屽湪鏌愮嶆剰涔変笂鏉ヨ叉墍鏈夋暟鍊奸兘鏄瀵硅薄銆傚硅薄鐨勭被鍨嬪拰琛屼負鏄鐢眂lass鍜宼rait鏉ユ弿榪扮殑銆侰lass鐨勬娊璞″彲鐢卞瓙綾誨寲鍜屼竴縐嶇伒媧葷殑鍩轟簬mixin鐨勭粍鍚堟満鍒(瀹冨彲浣滀負澶氶噸緇ф壙鐨勭畝鍗曟浛浠f柟妗)鏉ユ墿灞曘
路 Scala鏄鍑芥暟寮忕殑
Scala榪樻槸涓涓鍑芥暟寮忚璦錛屽湪鏌愮嶆剰涔変笂鏉ヨ叉墍鏈夊嚱鏁伴兘鏄鏁板箋係cala涓哄畾涔夊尶鍚嶅嚱鏁版彁渚涗簡涓縐嶈交閲忕駭鐨勮娉曪紝瀹冩敮鎸侀珮闃(higher-order)鍑芥暟銆佸厑璁稿嚱鏁板祵濂椼佹敮鎸佸矓閮ㄥ楃敤(currying)銆係cala鐨刢ase綾誨強鍏跺唴緗鏀鎸佺殑妯″紡鍖歸厤妯″瀷浠f暟綾誨瀷鍦ㄨ稿氬嚱鏁板紡緙栫▼璇璦涓閮借浣跨敤銆
路 Scala鏄闈欐佺被鍨嬬殑
Scala閰嶅囦簡涓濂楀瘜鏈夎〃鐜板姏鐨勭被鍨嬬郴緇燂紝璇ユ娊璞℃傚康浠ヤ竴縐嶅畨鍏ㄧ殑鍜屼竴鑷寸殑鏂瑰紡琚浣跨敤銆
路 Scala鏄鍙鎵╁睍鐨
Scala鐨勮捐℃壙璁や簡瀹炶返浜嬪疄錛岄嗗煙鐗瑰畾搴旂敤寮鍙戦氬父闇瑕侀嗗煙鐗瑰畾璇璦鎵╁睍銆係cala鎻愪緵浜嗕竴涓鐙鐗圭殑璇璦緇勫悎鏈哄埗錛岃繖鍙浠ユ洿鍔犲規槗鍦頒互綾誨簱鐨勫艦寮忓炲姞鏂扮殑璇璦緇撴瀯錛
浠諱綍鏂瑰紡鍙浠ヨ鐢ㄤ綔涓緙(infix)鎴栧悗緙(postfix)鎿嶄綔絎﹂棴鍖呮寜鐓ф墍鏈熸湜鐨勭被鍨(鐩鏍囩被鍨)鑷鍔ㄥ湴琚鏋勯
涓よ呯粨鍚堜嬌鐢ㄥ彲鏂逛究鍦板畾涔夋柊璇鍙ワ紝鏃犻渶鎵╁睍璇娉曪紝涔熸棤闇浣跨敤綾諱技瀹忕殑鍏冪紪紼嬪伐鍏楓
路 Scala鍙涓嶫ava鍜.NET榪涜屼簰鎿嶄綔
Scala璁捐℃椂灝辮冭檻浜嗕笌嫻佽岀紪紼嬬幆澧冭壇濂戒氦浜掞紝濡侸ava 2榪愯屾椂鐜澧(JRE)鍜 .NET妗嗘灦(CLR)銆傜壒鍒鏄涓庝富嫻侀潰鍚戝硅薄璇璦錛屽侸ava鍜孋#灝介噺鏃犵紳浜や簰銆係cala鏈夊儚Java鍜孋#涓鏍風殑緙栬瘧妯″瀷(鐙絝嬬紪璇戱紝鍔ㄦ佽呰澆綾)錛屽厑璁歌塊棶鎴愬崈涓婁竾鐨勯珮璐ㄩ噺綾誨簱銆
鍦ㄥ苟鍙戞ф柟闈錛屼笌 Scala 鍦 .NET 棰嗗煙涓鐨勫愬硅璦 F# 鐩鎬技錛孲cala 鏄閽堝 鈥滃苟鍙戞ч棶棰樷 鐨勮В鍐蟲柟妗堜箣涓錛岃╁紑鍙戜漢鍛樿兘澶熸洿鍔犺交鏉懼湴涓撴敞浜庨棶棰樼殑瀹炶川錛岃屼笉鐢ㄨ冭檻騫跺彂緙栫▼鐨勪綆綰х粏鑺傘侫ctor 緙栫▼妯″紡璁╅珮搴﹀苟琛屽簲鐢ㄧ▼搴忕殑寮鍙戞洿鍔犵畝鍗曘係cala鎶奅rlang椋庢牸鐨勫熀浜巃ctor鐨勫苟鍙戝甫榪涗簡JVM銆傛垜浠鍙浠ュ埄鐢⊿cala鐨刟ctor妯″瀷鍦↗VM涓婅捐″叿浼哥緝鎬х殑騫跺彂搴旂敤紼嬪簭錛屼互鑷鍔ㄨ幏寰楀氭牳蹇冨勭悊鍣ㄥ甫鏉ョ殑浼樺娍錛岃屼笉蹇呬緷鐓у嶆潅鐨凧ava綰跨▼妯″瀷鏉ョ紪鍐欑▼搴忋係cala 涓哄苟鍙戞ф彁渚涗簡涓ょ嶇駭鍒鐨勬敮鎸侊紝榪欎笌鍏朵粬涓 Java 鐩稿叧鐨勪富棰樻瀬涓虹被浼礆細
棣栧厛錛屽瑰簳灞傚簱鐨勫畬鍏ㄨ塊棶(姣斿傝 java.util.concurrent)浠ュ強瀵 鈥滀紶緇熲 Java 騫跺彂鎬ц涔夌殑鏀鎸(姣斿傝寸洃鎺х▼搴忓拰wait()/notifyAll())銆傚叾嬈★紝榪欎簺鍩烘湰鏈哄埗涓婇潰鏈変竴涓鎶借薄灞
Scala 鎻愪緵浜嗗湪紼沖畾鐨勯珮鎬ц兘騫沖彴(Java 鉶氭嫙鏈)涓婄敓鎴愮殑鑳藉姏鍚屾椂涔熸槸涓闂ㄦ晱鎹鋒ц璦銆傝繖涓綾誨瀷鐨勮璦涔熸湁鍏朵粬鐨勯夋嫨錛屼緥濡 Jython, JRuby, Groovy 鍜 Clojure, 浣嗘槸榪欎簺閮芥槸榪愯屽湪 JVM 涓婄殑鍔ㄦ佺被鍨嬭璦銆侽pen Class 鐨勬晥鏋滆╁ぇ瀹朵細瑙夊緱Scala鏄鍔ㄦ佽璦錛屼絾瀹冩槸閫夋嫨闅愬紡杞鎹㈡潵瀹炵幇鐨勶紝榪欎篃姝eソ璇佹槑浜哠cala鏄闈欐佽璦銆傞殣寮忚漿鎹(Implicit conversion)浣 Scala 鍏鋒湁綾誨瀷瀹夊叏鎬э紝姝e傛墿灞曟柟娉(extension method)涔嬩簬 C#錛屽紑鏀劇被(open class)涔嬩簬 ruby銆傚嵆錛氬悜鏈鏇懼畾涔夌殑綾誨瀷娣誨姞鏂規硶(濡傚瓧絎︿覆銆佸垪琛ㄣ佹暣鏁)銆傝繖鏄浣垮緱 Scala 絎﹀悎 DSL(鐗瑰畾棰嗗煙璇璦)妯″瀷鐨勭壒鎬т箣涓銆
Scala緇撳悎浜嗛潰鍚戝硅薄鍜屽嚱鏁扮紪紼嬬殑浼樺娍錛屽嚱鏁扮紪紼嬬殑涓涓濂藉勫氨鏄浣犺兘澶熷儚榪愮敤涓涓鏁版嵁閭f牱榪愮敤鍑芥暟錛屽彲浠ョ敤鏉ュ畾涔夌湡姝i珮灞傜駭鐨勫簱錛屾垨鑰呭幓瀹氫箟鏂扮殑棰嗗煙鐗規畩璇璦(DSL)銆

鍦ㄨ皥鍙奐ava涓嶴cala鐨勫規瘮鏃訛紝鏇懼啝涓滆〃紺猴紝Scala鑳借皟鐢ㄧ粷澶ч儴鍒嗙殑Java錛岃孞ava璋冪敤Scala鐙鏈夌殑涓滆タ浼氭瘮杈冮毦銆侸ava 鎷ユ湁闈炲父寮虹殑姒傚康瑙勮寖錛屽洜姝や換浣曚竴涓 Java 紼嬪簭涔嬮棿鍏鋒湁闈炲父澶氱殑鐩鎬技涔嬪勶紝騫朵笖榪欐牱鑳藉熸柟渚跨殑榪涜岀▼搴忓憳浜ゆ浛銆備絾鏄 Scala 騫舵病鏈夎繖鏍風殑緇熶竴鎬э紝鍥犱負榪欐槸涓闂ㄥ緢鏈夎〃鐜板姏鐨勮璦銆傜幇鍦烘浘鍐犱笢涓烘垜浠婕旂ず浜嗗疄闄呮堜緥錛屽備笅鍥炬墍紺猴細

姝f墍璋擄紝閲戞棤瓚寵丹錛屼漢鏃犲畬浜恆係cala瀵逛簩榪涘埗涓嶅吋瀹癸紝璇娉曚篃瓚婃潵瓚婂嶆潅錛屼笉鑳界獊鐮碆ytecode鐨勯檺鍒躲佺紪璇戦熷害鏈夋墍緙撴參銆傚綋瀹冭騫挎硾鐢ㄤ簬鍗曞厓嫻嬭瘯銆佸紑鍙戝伐鍏楓丼ocket寮鍙戙佷互鍙婇潰瀵瑰氭牳鎸戞垬鐨勫苟鍙戝簲鐢ㄣ傛昏岃█涔嬶紝Scala鏄涓縐嶅嚱鏁板紡闈㈠悜瀵硅薄璇璦錛屽畠鋙嶆眹浜嗚稿氬墠鎵鏈鏈夌殑鐗規э紝鑰屽悓鏃跺張榪愯屼簬JVM涔嬩笂銆傛e侸Ruby 鍒涘緩鑰呬箣涓Charles Nutter 鎵瀹gО鐨勯偅鏍稴cala灝辨槸 Java 鐜嬩綅鐨勫悎娉曠戶鎵誇漢銆傞殢鐫寮鍙戣呭筍cala鐨勫叴瓚f棩澧烇紝浠ュ強瓚婃潵瓚婂氱殑宸ュ叿鏀鎸侊紝鏃犵枒Scala璇璦灝嗘垚涓哄箍澶ц蔣浠跺伐紼嬪笀鎵嬩笂涓浠跺繀涓嶅彲灝戠殑宸ュ叿銆

『肆』 Spark 中用 Scala 和 java 開發有什麼區別

  1. 語言不同:Scala 是一門函數式語言,Java是面向對象語言,二者在語言特點上差異特別大。但是scala也是運行在java虛擬機上,兩者可以方便的互相調用。

  2. Spark作為一個數據統計分析的工具,它是偏向於函數式處理的思想,因此在spark應用開發時,天然與scala親近,所以用scala寫spark十分的簡潔明了,用java代碼100行寫出來的spark程序,可能用scala幾行就搞定了。

  3. Java寫spark則是java出生的開發人員快速使用spark的最佳選擇。另外,Java 8之後,也添加了一些函數式語言得語法,這使得Java寫spark簡潔不少。

閱讀全文

與利用scala語言開發spark應用程序相關的資料

熱點內容
蘋果的網站數據是什麼 瀏覽:22
ps滾字教程 瀏覽:237
win7網路鄰居如何保存ftp 瀏覽:186
安卓客戶端代理伺服器 瀏覽:572
編程用蘋果 瀏覽:659
51虛擬機的文件管理在哪裡 瀏覽:13
win10系統有沒有便簽 瀏覽:722
java引用傳遞和值傳遞 瀏覽:109
oracle下載安裝教程 瀏覽:854
php篩選資料庫 瀏覽:830
怎麼用手機看wlan密碼 瀏覽:745
奧維地圖導入的文件在哪裡 瀏覽:364
sdltrados2014教程 瀏覽:43
培訓制度文件在哪裡找 瀏覽:601
勒索病毒防疫工具 瀏覽:861
win10c不能打開 瀏覽:375
xfplay影音先鋒蘋果版 瀏覽:597
兩個文件打開兩個word 瀏覽:921
蘋果6s桌面圖標輕微抖動 瀏覽:326
如何刪除手機中看不見的臨時文件 瀏覽:469

友情鏈接