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

 

复制代码

 

 

 

posted @   夜半钟声到客船  阅读(3720)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示