語(yǔ)言不同:Scala 是一門(mén)函數(shù)式語(yǔ)言,Java是面向?qū)ο笳Z(yǔ)言,二者在語(yǔ)言特點(diǎn)上差異特別大。但是scala也是運(yùn)行在java虛擬機(jī)上,兩者可以方便的互相調(diào)用。

創(chuàng)新互聯(lián)公司公司2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站設(shè)計(jì)制作、成都做網(wǎng)站網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元鎮(zhèn)雄做網(wǎng)站,已為上家服務(wù),為鎮(zhèn)雄各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18980820575
Spark作為一個(gè)數(shù)據(jù)統(tǒng)計(jì)分析的工具,它是偏向于函數(shù)式處理的思想,因此在spark應(yīng)用開(kāi)發(fā)時(shí),天然與scala親近,所以用scala寫(xiě)spark十分的簡(jiǎn)潔明了,用java代碼100行寫(xiě)出來(lái)的spark程序,可能用scala幾行就搞定了。
Java寫(xiě)spark則是java出生的開(kāi)發(fā)人員快速使用spark的最佳選擇。另外,Java 8之后,也添加了一些函數(shù)式語(yǔ)言得語(yǔ)法,這使得Java寫(xiě)spark簡(jiǎn)潔不少。
例子:在開(kāi)發(fā)web項(xiàng)目結(jié)合spark云平臺(tái)時(shí)遇到一個(gè)難題,當(dāng)一個(gè)類繼承了ActionSupport成為一個(gè)action后,在它的method()中不能調(diào)用spark程序(會(huì)報(bào)找不到spark jar包的錯(cuò)誤,不知道怎么解決)。
解決方案:把spark程序打包成jar文件,寫(xiě)一個(gè)腳本,在action的method()中調(diào)用這個(gè)腳本,運(yùn)用spark-submit啟動(dòng)spark程序。
腳本代碼 ,CRS.sh :
/usr/local/spark/spark-1.0.0-bin-hadoop1/bin/spark-submit \
--class ar.runCourseCF \
--master local[4] \
/root/IdeaProjects/HelloWorld/web/WEB-INF/lib/test.jar
struts2 的 action類:
public class recommendationAction extends ActionSupport
implements ModelDrivenRecommendationArguments {
private RecommendationArguments recommendation = new RecommendationArguments();
public String execute() throws Exception
{
//腳本路徑
String shellPath = "/root/IdeaProjects/HelloWorld/src/CRS.sh";
System.out.println(shellPath);
ShellUtil shell = new ShellUtil();
shell.runShell(shellPath);
return SUCCESS;
}
public RecommendationArguments getModel()
{
return recommendation;
}
}
java運(yùn)行腳本的代碼:
public class ShellUtil {
public void runShell(String shellPath)
{
//String shellPath="/root/IdeaProjects/CRS.sh"; //程序路徑
try {
Process process = null;
//添加權(quán)限
String command1 = "chmod 777 " + shellPath;
process = Runtime.getRuntime().exec(command1);
process.waitFor();
//用sh CRS.sh執(zhí)行腳本
String command2 = "sh " + shellPath;
Runtime.getRuntime().exec(command2).waitFor();
}catch(Exception e)
{
System.out.println(e.toString());
1、Spark 是基于內(nèi)存的分布式計(jì)算框架,因?yàn)闊o(wú)需利用 HDFS 作為中間結(jié)果保存的介質(zhì),性能杠杠的。Spark 是由 Scala 實(shí)現(xiàn)的,所以最好學(xué)習(xí)一下 Scala(當(dāng)然用 Python 和 Java 也是可以的)。()
為啥要用 Spark?
快!基于內(nèi)存
易用!Scala, Java, Python 都支持,還有交互式的 Python 和 Scala 的 shell,可以快速進(jìn)行原型開(kāi)發(fā)
通用!批處理、交互查詢、流處理、機(jī)器學(xué)習(xí)、圖計(jì)算,樣樣精通
兼容!可以使用各種現(xiàn)有的技術(shù)作為底層,也可以自己獨(dú)立運(yùn)行
Spark 生態(tài)系統(tǒng)有哪些組件?
Spark SQL: 類似 Hive,支持在不同 RDD 上進(jìn)行類似 SQL 的操作
Spark Streaming: 對(duì)于流數(shù)據(jù)進(jìn)行處理
MLlib: 機(jī)器學(xué)習(xí)庫(kù)
GraphX: 圖并行框架
RDD 是什么?
在 Spark 框架中,最重要的是一類新的數(shù)據(jù)抽象,叫做 Resilient Distributed Dataset - RDD。RDD 是分布式存儲(chǔ)在集群中的內(nèi)存對(duì)象,按照值的范圍或者哈希結(jié)果進(jìn)行劃分。與此同時(shí) RDD 會(huì)記錄關(guān)于數(shù)據(jù)進(jìn)行的各種操作(每次操作都會(huì)生成新的 RDD),這樣即使節(jié)點(diǎn)掛掉,也能夠根據(jù)之前的操作日志重新得到損失的 RDD
RDD 支持2種操作:
轉(zhuǎn)換(transformation):從現(xiàn)有的數(shù)據(jù)集創(chuàng)建一個(gè)新的數(shù)據(jù)集
動(dòng)作(actions):在數(shù)據(jù)集上運(yùn)行計(jì)算后,返回一個(gè)值給驅(qū)動(dòng)程序
2、實(shí)戰(zhàn)java開(kāi)發(fā)spark程序
3、spark集群環(huán)境搭建
首先,打開(kāi)eclipse 然后,左上角文件(file)--project...--java -- java project 起個(gè)名字。點(diǎn)完成 右擊src。新建new--class 下面可以不勾。但是勾了會(huì)給你寫(xiě)代碼main函數(shù) 然后點(diǎn)完成 就可以寫(xiě)代碼了
分享標(biāo)題:java寫(xiě)spark代碼 java調(diào)用spark程序
網(wǎng)頁(yè)地址:http://chinadenli.net/article0/hpiioo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、網(wǎng)站建設(shè)、網(wǎng)站內(nèi)鏈、、品牌網(wǎng)站設(shè)計(jì)、靜態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)