天天看點

10. spark學習之旅之sbt(四)1. 依賴jar包的查找位址 Maven Repository倉庫2. scala中的項目管理工具sbt3. sbt進階4. spark之rdd小案例(sbt建構)5. 所有命運贈送的禮物,早已在暗中标着價格。

文章目錄

  • 1. [依賴jar包的查找位址 Maven Repository倉庫](https://mvnrepository.com/)
  • 2. scala中的項目管理工具sbt
    • 2.1.軟體安裝和配置
    • 2.2. [sbt官網案例](https://www.scala-sbt.org/1.x/docs/sbt-by-example.html)
  • 3. sbt進階
    • 3.1. 操作符
    • 3.2. task,裡面可以定義task,task可以是執行外部的指令
    • 3.3. 待完善
  • 4. spark之rdd小案例(`sbt建構`)
    • 4.1. PV計算
    • 4.2. UV計算
    • 4.3. TOPN
  • 5. 所有命運贈送的禮物,早已在暗中标着價格。

1. 依賴jar包的查找位址 Maven Repository倉庫

2. scala中的項目管理工具sbt

sbt是類似ANT、MAVEN的建構工具,全稱為Simple build tool,是Scala事實上的标準建構工具

2.1.軟體安裝和配置

  • sbt官網
  • Scala sbt的下載下傳及安裝
  • Linux安裝sbt,修改鏡像參照windows平台的方法
  • 通過sbt管理項目,要在build.properties中的版本改成與本地安裝一直,不然會用idea自己捆綁的

    10. spark學習之旅之sbt(四)1. 依賴jar包的查找位址 Maven Repository倉庫2. scala中的項目管理工具sbt3. sbt進階4. spark之rdd小案例(sbt建構)5. 所有命運贈送的禮物,早已在暗中标着價格。
  • windows下安裝配置sbt (

    重要

    )
    • 安裝軟體到位置:D:\dev\sbt
    • sbt安裝目錄下的conf目錄中添加了一個repo.properties檔案
      [repositories]
        local
        maven-local:file://D:/apache-maven-3.5.4/local_repository
        nexus-aliyun: https://maven.aliyun.com/nexus/content/groups/public/
        nexus-aliyun-apache: https://maven.aliyun.com/nexus/content/repositories/apache-snapshots/
        mapr-public: https://maven.aliyun.com/repository/mapr-public/
        typesafe: https://repo.typesafe.com/typesafe/ivy-releases/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext], bootOnly
        huaweicloud-maven: https://repo.huaweicloud.com/repository/maven/
        sbt-plugin-repo: https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]
      
                 
    • sbtconfig.txt配置
      -Dsbt.ivy.home=d:/sbt/.ivy2
      -Dsbt.global.base=d:/sbt/.sbt
      -Dsbt.repository.config=d:/sbt/conf/repo.properties
      -Dsbt.boot.directory=d:/sbt/.sbt/boot/
      -Dsbt.override.build.repos=true
                 
    • IDEA當中的配置
      10. spark學習之旅之sbt(四)1. 依賴jar包的查找位址 Maven Repository倉庫2. scala中的項目管理工具sbt3. sbt進階4. spark之rdd小案例(sbt建構)5. 所有命運贈送的禮物,早已在暗中标着價格。
      10. spark學習之旅之sbt(四)1. 依賴jar包的查找位址 Maven Repository倉庫2. scala中的項目管理工具sbt3. sbt進階4. spark之rdd小案例(sbt建構)5. 所有命運贈送的禮物,早已在暗中标着價格。
  • IDEA中建立maven工程後沒有scala檔案
    • 注意1:第一次輸入sbt的時候需要準備一些東西,是以下載下傳比較慢,主要下載下傳内容已經放到了我的百度雲盤:windows10平台,.ivy2和.sbt預設在c盤用的家目錄下面,建議配置到自己的安裝目錄下面,友善管理

    • 注意2:遇到了一個錯誤There may be incompatibilities among your library dependencies; run 'evicted

      • 解決: 需要把C:\Users\59404\AppData\Local\Temp目錄下的内容清理一下,由于安裝了多個版本導緻。
    • .ivy2和.sbt百度雲連結;提取碼 dxoj
      10. spark學習之旅之sbt(四)1. 依賴jar包的查找位址 Maven Repository倉庫2. scala中的項目管理工具sbt3. sbt進階4. spark之rdd小案例(sbt建構)5. 所有命運贈送的禮物,早已在暗中标着價格。

2.2. sbt官網案例

3. sbt進階

3.1. 操作符

  • :=

    是給key配置設定一個初始表達式,覆寫原來的任何配置
  • +=

    是追加一個值到key
  • ++=

    是追加一個隊列,隊列中放值,将值追加到key

3.2. task,裡面可以定義task,task可以是執行外部的指令

  • 案例一
    // 定義了task的類型為Unit,Key值叫helloTask
    val helloTask = taskKey[Unit]("say hello")
    
    helloTask := {
      print("hello task!")
    }
               
    10. spark學習之旅之sbt(四)1. 依賴jar包的查找位址 Maven Repository倉庫2. scala中的項目管理工具sbt3. sbt進階4. spark之rdd小案例(sbt建構)5. 所有命運贈送的禮物,早已在暗中标着價格。
  • 案例二(

    task之間沒有依賴關系

    val helloTask = taskKey[String]("say hello")
    val hiTask = taskKey[String]("say hi")
    val byeTask = taskKey[String]("say bye")
    
    val runAllTask = taskKey[Unit]("run all")
    
    runAllTask := {
      println(helloTask.value)
      println(hiTask.value)
      println(byeTask.value)
    }
    
    helloTask := {
      val hello = "hello"
      println(s"hello task run: $hello")
      Thread sleep 2000
      hello
    }
    
    hiTask := {
      val hi = "hi"
      println(s"hi task run: $hi")
      Thread sleep 2000
      hi
    }
    
    byeTask := {
      val bye = "bye"
      println(s"bye task run: $bye")
      Thread sleep 2000
      bye
    }
               
    10. spark學習之旅之sbt(四)1. 依賴jar包的查找位址 Maven Repository倉庫2. scala中的項目管理工具sbt3. sbt進階4. spark之rdd小案例(sbt建構)5. 所有命運贈送的禮物,早已在暗中标着價格。
  • 案例三(

    有依賴關系

    val helloTask = taskKey[String]("say hello")
    val hiTask = taskKey[String]("say hi")
    val byeTask = taskKey[String]("say bye")
    
    val runAllTask = taskKey[Unit]("run all")
    
    runAllTask := {
      println(helloTask.value)
      println(hiTask.value)
      println(byeTask.value)
    }
    
    helloTask := {
      val hello = "hello"
      println(s"hello task run: $hello")
      Thread sleep 2000
      hello
    }
    
    hiTask := {
      val hi = "hi"
      println(s"hi task run: $hi")
      Thread sleep 2000
      hi
    }
    
    byeTask := {
      val hi = hiTask.value
      val bye = "bye"
      println(s"hi task run: $hi")
      println(s"bye task run: $bye")
      Thread sleep 2000
      bye
    }
               
    10. spark學習之旅之sbt(四)1. 依賴jar包的查找位址 Maven Repository倉庫2. scala中的項目管理工具sbt3. sbt進階4. spark之rdd小案例(sbt建構)5. 所有命運贈送的禮物,早已在暗中标着價格。
  • 結論
    • 在沒有依賴關系的時候是并行,但有依賴關系就是串行,如果我們再設定hi依賴hello,那麼就是6s

    • 如果互相依賴可能造成死鎖,比如a依賴b的value,b裡面又依賴a的value,那麼就是雞生蛋和蛋生雞的問題了

  • 詳細連結

3.3. 待完善

4. spark之rdd小案例(

sbt建構

4.1. PV計算

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object PV {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setAppName("pv").setMaster("local[2]")
    val sc = new SparkContext(conf)

    val result: RDD[(String, Int)] = sc.textFile("D:\\access.log").map(x => ("pv", 1)).reduceByKey(_ + _)
    result.foreach(println)

  }
}


           

4.2. UV計算

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object UV {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setAppName("pv").setMaster("local[2]")
    val sc = new SparkContext(conf)

    val result: RDD[(String, Int)] = sc.textFile("D:\\access.log").map(_.split(" ")).map(x => x(0)).distinct().map(x => ("uv", 1)).reduceByKey(_+_)
    result.foreach(println)

  }
}

           

4.3. TOPN

  • 資料格式
    10. spark學習之旅之sbt(四)1. 依賴jar包的查找位址 Maven Repository倉庫2. scala中的項目管理工具sbt3. sbt進階4. spark之rdd小案例(sbt建構)5. 所有命運贈送的禮物,早已在暗中标着價格。
import org.apache.spark.{SparkConf, SparkContext}

object TopN {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setAppName("pv").setMaster("local[2]")
    val sc = new SparkContext(conf)

    val result: Array[(String, Int)] = sc.textFile("access.log").map(_.split(" ")).map(x => x(10)).map((_, 1)).reduceByKey(_ + _).sortBy(_._2, false).take(3)
    println(result)
  }
}

           

5. 所有命運贈送的禮物,早已在暗中标着價格。

繼續閱讀