免费观看又色又爽又黄的小说免费_美女福利视频国产片_亚洲欧美精品_美国一级大黄大色毛片

spark2.x由淺入深深到底系列六之RDDjavaapi調用scalaapi的原理

學習spark任何的技術之前,請正確理解spark,可以參考:正確理解spark

成都創新互聯是一家集網站建設,昭通企業網站建設,昭通品牌網站建設,網站定制,昭通網站建設報價,網絡營銷,網絡優化,昭通網站推廣為一體的創新建站企業,幫助傳統企業提升企業形象加強企業競爭力??沙浞譂M足這一群體相比中小企業更為豐富、高端、多元的互聯網需求。同時我們時刻保持專業、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們為更多的企業打造出實用型網站。

RDD java api其實底層是調用了scala的api來實現的,所以我們有必要對java api是怎么樣去調用scala api,我們先自己簡單的實現一個scala版本和java版本的RDD和SparkContext

一、簡單實現scala版本的RDD和SparkContext

class RDD[T](value: Seq[T]) {
  //RDD的map操作
  def map[U](f: T => U): RDD[U] = {
    new RDD(value.map(f))
  }
  
  def iterator[T] = value.iterator
  
}

class SparkContext {
  //創建一個RDD
  def createRDD(): RDD[Integer] = new RDD[Integer](Seq(1, 2, 3))

}

二、簡單實現java版本的RDD和SparkContext

//這個時java中的一個接口
//我們可以將scala中的map需要的函數其實就是對應著java中的一個接口
package com.twq.javaapi.java7.function;
public interface Function<T1, R> extends Serializable {
  R call(T1 v1) throws Exception;
}

//這邊實現的java版的RDD和SparkContext其實還是用scala代碼實現,只不過這些scala代碼可以被java代碼調用了
import java.util.{Iterator => JIterator}
import scala.collection.JavaConverters._
import com.twq.javaapi.java7.function.{Function => JFunction}
//每一個JavaRDD都會含有一個scala的RDD,用于調用該RDD的api
class JavaRDD[T](val rdd: RDD[T]) {

  def map[R](f: JFunction[T, R]): JavaRDD[R] =
    //這里是關鍵,調用scala RDD中的map方法
    //我們將java的接口構造成scala RDD的map需要的函數函數
    new JavaRDD(rdd.map(x => f.call(x)))
  //我們需要將scala的Iterator轉成java版的Iterator
  def iterator: JIterator[T] = rdd.iterator.asJava

}

//每個JavaSparkContext含有一個scala版本的SparkContext
class JavaSparkContext(sc: SparkContext) {
  def this() = this(new SparkContext())
  //轉調scala版本的SparkContext來實現JavaSparkContext的功能
  def createRDD(): JavaRDD[Integer] = new JavaRDD[Integer](sc.createRDD())
}

三、寫java代碼調用rdd java api

package com.twq.javaapi.java7;

import com.twq.javaapi.java7.function.Function;
import com.twq.rdd.api.JavaRDD;
import com.twq.rdd.api.JavaSparkContext;

import java.util.Iterator;

/**
 * Created by tangweiqun on 2017/9/16.
 */
public class SelfImplJavaRDDTest {
    public static void main(String[] args) {
        //初始化JavaSparkContext
        JavaSparkContext jsc = new JavaSparkContext();
        //調用JavaSparkContext的api創建一個RDD
        JavaRDD<Integer> firstRDD = jsc.createRDD();
        //對創建好的firstRDD應用JavaRDD中的map操作
        JavaRDD<String> strRDD = firstRDD.map(new Function<Integer, String>() {
            @Override
            public String call(Integer v1) throws Exception {
                return v1 + "test";
            }
        });
        //將得到的RDD的結果打印,結果為
        //1test
        //2test
        //3test
        Iterator<String> result = strRDD.iterator();
        while (result.hasNext()) {
            System.out.println(result.next());
        }
    }
}

以上就是RDD java api調用scala api的實現原理,雖然只舉了map操作,但是其他的類似于flatMap操作的實現都是類似的

接下來可以詳細了解RDD java的每一個api

我們可以參考spark core RDD api來詳細理解scala中的每一個api。。。

系統學習spark:
1、[老湯] Spark 2.x 之精講Spark Core:https://edu.51cto.com/sd/88429 
2、[老湯]Spark 2.x 之精講Spark SQL專題:https://edu.51cto.com/sd/16f3d 
3、[老湯]Scala內功修煉系列專題:https://edu.51cto.com/sd/8e85b 
4、[老湯]Spark 2.x之精講Spark Streamig:https://edu.51cto.com/sd/8c525 
5、[老湯]Spark 2.x精講套餐:https://edu.51cto.com/sd/ff9a4 
6、從Scala到Spark 2.x專題:https://edu.51cto.com/sd/d72af

分享文章:spark2.x由淺入深深到底系列六之RDDjavaapi調用scalaapi的原理
本文路徑:http://m.newbst.com/article40/gpgjeo.html

成都網站建設公司_創新互聯,為您提供微信小程序網站改版、Google全網營銷推廣用戶體驗、面包屑導航

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

微信小程序開發