歡迎來到魔據教育大數據學院,專注大數據工程師培養!
當前位置:首頁 > 學習資料 > 講師博文 > Spark javardd入門

Spark javardd入門

時間:2017-08-17 17:55:48作者:[!--zuozhe--]

9-1.png

 

Apache Spark 是專為大規模數據處理而設計的快速通用的計算引擎。SPARK不同于MapReduce的是Job中間輸出結果可以保存在內存中,從而不再需要讀寫HDFS,因此Spark能更好地適用于數據挖掘與機器學習等需要迭代的MapReduce的算法。
 
Spark 是在 Scala 語言中實現的,但提供scala、java、python、hivesql等語音開發接口。并且Spark 提供了大量的庫,包括SQL、DataFrames、MLlib、GraphX、Spark Streaming。
 
Spark建立在統一抽象的RDD(Resilient Distributed Datasets)之上。RDD是彈性分布式數據集,即分布式的元素集合。在spark中,對所有數據的操作都是創建RDD、轉化已有的RDD以及調用RDD操作進行求值。在這一切的背后,Spark會自動將RDD中的數據分發到集群中,并將操作并行化。用java實現的rdd稱為javardd,本文主要為大家介紹用java實現的spark程序javardd。
 
使用javardd的好處,對應經常使用java的人員學習成本較低上手spark較快。劣勢,沒有scala編寫簡潔。
 
以下是javardd常用的幾個方法:
1、map(func):對每行數據使用func,然后返回一個新的RDD,數據處理-每行。
2、filter(func):對每行數據使用func,然后返回func后為true的數據,用于過濾。
3、flatMap(func):和map差不多,但是flatMap生成的是多個結果,用于行轉列。
4、groupByKey(numTasks):返回(K,Seq[V]),也就是Hadoop中reduce函數接受的
key-valuelist
5、reduceByKey(func,[numTasks]):就是用一個給定的reduce func再作用在groupByKey產
生的(K,Seq[V]),比如求和,求平均數
6、sortByKey([ascending],[numTasks]):按照key來進行排序,是升序還是降序,ascending
是boolean類型
 
接下來為大家以代碼案例的形式介紹每個方法的用法,spark分為轉換因子和執行因子,轉換因子為對javardd進行數據格式轉換。執行因子為確定數據執行方式。Spark為懶惰式,如果沒有執行因子程序是不執行的。
 
代碼案例-轉換因子
 

9-2.png

首先加載數據,加載hdfs數據
JavaRDD<String> baseLines = ctx.textFile(“hdfs:///dx/basic”);
1) Map,用例為數據加上日期標識
JavaRDD<String> filedata = baseLines.map(new Function<String, String>() {
@Override
public String call(String s) {
s = s + “|20170101”;
return s;
}
});
2) Filter,用例提取包含jpg的圖片地址
JavaRDD<String> fileclear = baseLines.filter(new Function<String, Boolean>() {
@Override
public Boolean call(String s) {
if (s.indexOf(“.jpg”)>=0) {
return true;
}
return false;
}
});
3) flatMap,行轉列
JavaRDD<String> words = baseLines.flatMap(new FlatMapFunction<String, String>() {
@Override
public Iterator<String> call(String s) {
return Arrays.asList(SPACE.split(s)).iterator();
}
});
元數據格式
1 2 3 4 5
轉換后格式
1
2
3
4
5
4) groupByKey
將數據進行按key分組
JavaPairRDD<String, String> userpropv = baseLines
.mapToPair(new PairFunction<String, String, String>() {
@Override
public Tuple2<String, String> call(String s) throws Exception {
String[] str = s.split(“,”);
//產品id+用戶號碼作為key
return new Tuple2<>(str[2], "1");
}
});
 
JavaPairRDD<String, Iterable<String>> dxgroupedPairs = userpropv.groupByKey();

9-3.png

5) reduceByKey
作用于groupByKey產生的value上比如求和求平均值。
JavaPairRDD<String, Integer> counts =
userpropv.reduceByKey(new Function2<Integer, Integer, Integer>() {
@Override
public Integer call(Integer i1, Integer i2) {
    return i1 + i2;
  }
});
6) sortByKey,第二個參數true升序、false降序
JavaRDD< String > resultRDD = baseLines.sortBy(
new Function<String, Object>() {
@Override
public Object call(String v1) throws Exception {
return v1;
}
}, false, 1);
 
代碼案例-執行因子
1、saveAsTextFile 數據保存
resultRDD..saveAsTextFile(“/outpath”)
2、collect()小結果集數組轉換
   List<String> list = resultRDD. collect();
 
以上是spark javardd常用因子,在一般程序中較為常用的。
 
參考地址:http://spark.apache.org/docs/latest/api/java/index.html

更多大數據相關資訊敬請關注魔據教育,為您分享最及時的大數據資訊。
學習大數據敬請關注魔據教育微信二維碼。
魔據教育微信二維碼

【版權與免責聲明】如發現內容存在版權問題,煩請提供相關信息發郵件至[email protected],我們將及時溝通與處理。本站內容除非來源注明魔據教育,否則均為網友轉載,涉及言論、版權與本站無關。

全國咨詢熱線:18501996998,值班手機:18501996998(7*24小時)

在線咨詢:張老師QQ 320169340

企業合作服務專線:010-82340234-821, 院校合作洽談專線:010-82340234

Copyright 2001-2019 魔據教育 - 北京華育興業科技有限公司 版權所有,京ICP備17018991號-2

免費在線咨詢立即咨詢

免費索取技術資料立即索取

大數據技術交流QQ:226594285

電話咨詢010-82340234

【看图找生肖】免费