溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

spark01--scala 的wordcount的過程是怎樣的

發(fā)布時(shí)間:2021-10-19 10:54:38 來源:億速云 閱讀:115 作者:柒染 欄目:大數(shù)據(jù)

今天就跟大家聊聊有關(guān)spark01--scala 的wordcount的過程是怎樣的,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

第一版:原始版本

def main(args: Array[String]): Unit = {
    val conf = new SparkConf()
    conf.setAppName("workcount")
    conf.setMaster("local")

    //SparkContext 是通往spark 集群的唯一通道
    val sc = new SparkContext(conf)

    /** 加載配置當(dāng)前項(xiàng)目下words文件的內(nèi)容
      * 內(nèi)容為:
        hello java
        hello spark
        hello hdfs
        hello mr
        hello java
        hello spark
      */
    val lines = sc.textFile("./words")
    //line為每一行,每一行經(jīng)過" "空格切分成RRD類型
    val lists: RDD[String] = lines.flatMap(line => {line.split(" ")})
    //單詞轉(zhuǎn)換成二元元組
    val values: RDD[(String, Int)] = lists.map(word=>{new Tuple2(word,1)})
    /**
      * reduceByKey 函數(shù)是先把相同的單詞(key)進(jìn)行分組,如
      hello 1
      hello 1
      hello 1
      hello 1
      hello 1
      hello 1

      java 1
      java 1

      spark 1
      spark 1

      hdfs 1
      mr 1

      (v1:Int, v2:Int)=>{v1+v2} 表示經(jīng)過分組后的單詞元組(Sring,Int),相同key的 value進(jìn)行累加,返回v1+v2 就是累加的值
      */
    val result: RDD[(String, Int)] = values.reduceByKey((v1:Int, v2:Int)=>{v1+v2})
    //遍歷結(jié)果
    result.foreach(println)
    //關(guān)閉
    sc.stop()
  }

第二版:

 def main(args: Array[String]): Unit = {
    val conf = new SparkConf()
    conf.setAppName("workcount")
    conf.setMaster("local")

    val sc = new SparkContext(conf)
    val result = sc.textFile("./words").flatMap(line=>line.split(" ")).map(world=>new Tuple2(world,1)).reduceByKey((v1:Int, v2:Int)=>{v1+v2})

    result.foreach(println)
    sc.stop()

  }

第三版本:最簡版本

  def main(args: Array[String]): Unit = {
    val conf = new SparkConf()
    conf.setAppName("workcount")
    conf.setMaster("local")

    val sc = new SparkContext(conf)
    val result = sc.textFile("./words").flatMap(_.split(" ")).map((_, 1)).reduceByKey(_+_)

    result.foreach(println)
    sc.stop()
  }

簡化后解釋:

xxx.flatMap(line=>line.split(" "))中參數(shù)line只在=>后面使用一次,可以用 "_" 符號(hào)來表示該參數(shù),xxx.flatMap(_.split(" "))

xxx.map(world=>new Tuple2(world,1))中world參數(shù)也是在=>后只使用一次,可以使用 "_"來表示,元組可以省略new,也可以省略Tuple2,xxx.map((_,1))

xxx.reduceByKey((v1:Int, v2:Int)=>{v1+v2})中v1,v2也是在=>后只使用一次,均可以使用"_"來表示,xxx.reduceByKey((_+_)

看完上述內(nèi)容,你們對(duì)spark01--scala 的wordcount的過程是怎樣的有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI