scala語言中的case關鍵字在spark中的一個奇特使用


package com.spark.demo

import com.spark.demo.util.SparkUtil
import org.apache.spark.rdd.RDD

import scala.collection.mutable

/**
  * @created by imp ON 2019/2/14
  */
case class Person1(name:String,age:Int)
object CaseDemo {
  def main(args: Array[String]): Unit = {
    val appName = this.getClass.getName
    val isLocal = true
    val conf = SparkUtil.generateSparkConf(appName, isLocal, that => {
      // 這里可以單獨的指定當前spark應用的相關參數
      // nothings
      that.set("", "")
    })
    // 2.3 SparkContext對象的構建
    val sc = SparkUtil.getSparkContext(conf)
    //可單獨寫方法判斷 讀取hdfs的某一天文件夾下所以文件
    val path = "data/person"
    val data: RDD[Any] = sc.textFile(path).map {
      //case替代map(line=>)的寫法 不在使用._1 ._2  上一個父rdd的類型值可直接命名為變量使用
      case (line) => {
        val arr = line.split(" ")
        (arr(0), arr(1))
      }
    }
      .map(info => {
        Person1(info._1, info._2.toInt)
      })
      .map {
        //case(p)相當於 map(p=>{})
        case (person) => {
          (person, (person.name, person.age))
        }

      }.map {
      case (person, (name, age)) => {

        val map = mutable.HashMap[String, Int]()
        map.+=(name -> age)
      }

    }
    data.foreach(println(_))


  }

}

 

結果如下 

data.map(i=>{   })與
data.map{

case(上一個父rdd的類型值可直接命名為變量使用)=>{
//case() } }是一樣的道理 第二個代碼看起來明了,可直接知道父rdd的數據類型及結構,

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM