最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java-spark中各種常用算子的寫法示例

 更新時間:2018年06月20日 08:42:31   作者:horseman  
這篇文章主要給大家介紹了關(guān)于java-spark中各種常用算子的寫法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

Spark的算子的分類

從大方向來說,Spark 算子大致可以分為以下兩類:

1)Transformation 變換/轉(zhuǎn)換算子:這種變換并不觸發(fā)提交作業(yè),完成作業(yè)中間過程處理。

Transformation 操作是延遲計(jì)算的,也就是說從一個RDD 轉(zhuǎn)換生成另一個 RDD 的轉(zhuǎn)換操作不是馬上執(zhí)行,需要等到有 Action 操作的時候才會真正觸發(fā)運(yùn)算。

2)Action 行動算子:這類算子會觸發(fā) SparkContext 提交 Job 作業(yè)。

Action 算子會觸發(fā) Spark 提交作業(yè)(Job),并將數(shù)據(jù)輸出 Spark系統(tǒng)。

從小方向來說,Spark 算子大致可以分為以下三類:

1)Value數(shù)據(jù)類型的Transformation算子,這種變換并不觸發(fā)提交作業(yè),針對處理的數(shù)據(jù)項(xiàng)是Value型的數(shù)據(jù)。

2)Key-Value數(shù)據(jù)類型的Transfromation算子,這種變換并不觸發(fā)提交作業(yè),針對處理的數(shù)據(jù)項(xiàng)是Key-Value型的數(shù)據(jù)對。

3)Action算子,這類算子會觸發(fā)SparkContext提交Job作業(yè)。

引言

通常寫spark的程序用scala比較方便,畢竟spark的源碼就是用scala寫的。然而,目前java開發(fā)者特別多,尤其進(jìn)行數(shù)據(jù)對接、上線服務(wù)的時候,這時候,就需要掌握一些spark在java中的使用方法了

一、map

map在進(jìn)行數(shù)據(jù)處理、轉(zhuǎn)換的時候,不能更常用了

在使用map之前 首先要定義一個轉(zhuǎn)換的函數(shù) 格式如下:

Function<String, LabeledPoint> transForm = new Function<String, LabeledPoint>() {//String是某一行的輸入類型 LabeledPoint是轉(zhuǎn)換后的輸出類型
 @Override
 public LabeledPoint call(String row) throws Exception {//重寫call方法
 String[] rowArr = row.split(",");
 int rowSize = rowArr.length;
 
 double[] doubleArr = new double[rowSize-1];
 
 //除了第一位的lable外 其余的部分解析成double 然后放到數(shù)組中
 for (int i = 1; i < rowSize; i++) {
  String each = rowArr[i];
  doubleArr[i] = Double.parseDouble(each);
 }
 
 //用剛才得到的數(shù)據(jù) 轉(zhuǎn)成向量
 Vector feature = Vectors.dense(doubleArr);
 double label = Double.parseDouble(rowArr[0]);
 //構(gòu)造用于分類訓(xùn)練的數(shù)據(jù)格式 LabelPoint
 LabeledPoint point = new LabeledPoint(label, feature);
 return point;
 }
 };

需要特別注意的是:

1、call方法的輸入應(yīng)該是轉(zhuǎn)換之前的數(shù)據(jù)行的類型  返回值應(yīng)是處理之后的數(shù)據(jù)行類型

2、如果轉(zhuǎn)換方法中調(diào)用了自定義的類,注意該類名必須實(shí)現(xiàn)序列化 比如

public class TreeEnsemble implements Serializable {
}

3、轉(zhuǎn)換函數(shù)中如果調(diào)用了某些類的對象,比如該方法需要調(diào)用外部的一個參數(shù),或者數(shù)值處理模型(標(biāo)準(zhǔn)化,歸一化等),則該對象需要聲明是final

然后就是在合適的時候調(diào)用該轉(zhuǎn)換函數(shù)了

JavaRDD<LabeledPoint> rdd = oriData.toJavaRDD().map(transForm);

這種方式是需要將普通的rdd轉(zhuǎn)成javaRDD才能使用的,轉(zhuǎn)成javaRDD的這一步操作不耗時,不用擔(dān)心

二、filter

在避免數(shù)據(jù)出現(xiàn)空值、0等場景中也非常常用,可以滿足sql中where的功能

這里首先也是要定義一個函數(shù),該函數(shù)給定數(shù)據(jù)行 返回布爾值 實(shí)際效果是將返回為true的數(shù)據(jù)保留

Function<String, Boolean> boolFilter = new Function<String, Boolean>() {//String是某一行的輸入類型 Boolean是對應(yīng)的輸出類型 用于判斷數(shù)據(jù)是否保留
 @Override
 public Boolean call(String row) throws Exception {//重寫call方法
 boolean flag = row!=null;
 return flag;
 }
 };

通常該函數(shù)實(shí)際使用中需要修改的僅僅是row的類型 也就是數(shù)據(jù)行的輸入類型,和上面的轉(zhuǎn)換函數(shù)不同,此call方法的返回值應(yīng)是固定為Boolean

然后是調(diào)用方式

JavaRDD<LabeledPoint> rdd = oriData.toJavaRDD().filter(boolFilter);

三、mapToPair

該方法和map方法有一些類似,也是對數(shù)據(jù)進(jìn)行一些轉(zhuǎn)換。不過此函數(shù)輸入一行 輸出的是一個元組,最常用的方法是用來做交叉驗(yàn)證 或者統(tǒng)計(jì)錯誤率 召回率 計(jì)算AUC等等

同樣,需要先定義一個轉(zhuǎn)換函數(shù)

Function<String, Boolean> transformer = new PairFunction<LabeledPoint, Object, Object>() {//LabeledPoint是輸入類型 后面的兩個Object不要改動
 @Override
 public Tuple2 call(LabeledPoint row) throws Exception {//重寫call方法 通常只改動輸入?yún)?shù) 輸出不要改動
 double predicton = thismodel.predict(row.features());
 double label = row.label();
 return new Tuple2(predicton, label);
 }
 });

關(guān)于調(diào)用的類、類的對象,要求和之前的一致,類需要實(shí)現(xiàn)序列化,類的對象需要聲明成final類型

相應(yīng)的調(diào)用如下:

JavaPairRDD<Object, Object> predictionsAndLabels = oriData.mapToPair(transformer);

然后對該predictionsAndLabels的使用,計(jì)算準(zhǔn)確率、召回率、精準(zhǔn)率、AUC,接下來的博客中會有,敬請期待

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • mybatisplus中的xml對象參數(shù)傳遞問題

    mybatisplus中的xml對象參數(shù)傳遞問題

    這篇文章主要介紹了mybatisplus中的xml對象參數(shù)傳遞問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 線程池FutureTask異步執(zhí)行多任務(wù)實(shí)現(xiàn)詳解

    線程池FutureTask異步執(zhí)行多任務(wù)實(shí)現(xiàn)詳解

    這篇文章主要為大家介紹了線程池FutureTask異步執(zhí)行多任務(wù)實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • JavaCV實(shí)現(xiàn)將視頻以幀方式抽取

    JavaCV實(shí)現(xiàn)將視頻以幀方式抽取

    這篇文章主要為大家詳細(xì)介紹了JavaCV實(shí)現(xiàn)將視頻以幀方式抽取,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • java 微信隨機(jī)紅包算法代碼實(shí)例

    java 微信隨機(jī)紅包算法代碼實(shí)例

    這篇文章主要介紹了java 微信隨機(jī)紅包算法的相關(guān)資料,并附實(shí)例代碼,需要的朋友可以參考下
    2016-10-10
  • Java集合Map的clear與new Map區(qū)別詳解

    Java集合Map的clear與new Map區(qū)別詳解

    這篇文章主要介紹了Java集合Map的clear與new Map區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • java中容器(頂層容器和中間容器)的布局管理器詳解

    java中容器(頂層容器和中間容器)的布局管理器詳解

    這篇文章主要介紹了java中容器(頂層容器和中間容器)的布局管理器詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 詳解Java中Thread 和Runnable區(qū)別

    詳解Java中Thread 和Runnable區(qū)別

    這篇文章主要介紹了Java中Thread 和Runnable的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • JAVA Web.xml加載順序過程詳解

    JAVA Web.xml加載順序過程詳解

    這篇文章主要介紹了JAVA Web.xml加載順序過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-12-12
  • idea中創(chuàng)建多module的maven工程的方法

    idea中創(chuàng)建多module的maven工程的方法

    這篇文章主要介紹了idea中創(chuàng)建多module的maven工程的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-10-10
  • IDEA 2020.2 部署JSF項(xiàng)目的詳細(xì)過程

    IDEA 2020.2 部署JSF項(xiàng)目的詳細(xì)過程

    本文通過圖文并茂的形式教大家如何在IDEA中創(chuàng)建一個JSF項(xiàng)目及遇到問題的解決方法,感興趣的朋友跟隨小編一起看看吧
    2021-09-09

最新評論

固安县| 桑日县| 湘潭市| 广安市| 灵寿县| 章丘市| 余江县| 闵行区| 合山市| 青铜峡市| 永宁县| 登封市| 柯坪县| 吉木乃县| 平阳县| 芮城县| 陵水| 新乡市| 栾城县| 志丹县| 南昌市| 西平县| 黔东| 天气| 绍兴市| 绵阳市| 孝昌县| 汽车| 永顺县| 紫金县| 宝丰县| 宽城| 会东县| 阳朔县| 德清县| 余庆县| 淮阳县| 菏泽市| 石嘴山市| 曲阜市| 永泰县|