• 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的数据类型及结构,

  • 相关阅读:
    Spring Boot 2.x基础教程:加密配置中的敏感信息
    Spring Boot 2.x基础教程:Swagger静态文档的生成
    Spring Boot 2.x基础教程:使用Swagger2构建强大的API文档
    线性代数相关
    CF1738 E. Balance Addicts
    初赛
    排列&答案最优
    2022牛客OI赛前集训营提高组(第一场)
    10/3 模拟赛 | 牛客 2020 tg1
    Codeforces Round #821 (Div. 2) D E
  • 原文地址:https://www.cnblogs.com/hejunhong/p/10375006.html
Copyright © 2020-2023  润新知