栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

一次说清scala-spark中的模式匹配,样例类以及option

一次说清scala-spark中的模式匹配,样例类以及option

目录目录

前言

一、模式匹配是什么?

二、模式匹配案例

1.简单模式匹配

2.类型模式匹配

3.样例类模式匹配

样例类是什么?

样例类的模式匹配

4.option类



前言

 在spark中scala的模式匹配是重要的功能,它大量体现在spark的源码之中,它的作用与Java中的switch语句相似

一、模式匹配是什么?

模式匹配就是Java中的switch语句,如果能够匹配的上,就会执行case的语句,如果匹配不上,就会默认匹配case_,相当于Java中的默认值,与switch不同的一点是它可以匹配类型。

二、模式匹配案例

1.简单模式匹配
object scala01 {
  def main(args: Array[String]): Unit = {

    for (i <- 1 to 5) {
//随机取0-3
      val index = Random.nextInt(5)
      val test: String = index match { 
        case 1 => "apple"
        case 2 => "egg"
        case 3 => "pp"
        case _ => "none" //相当于默认值
      }
      println("index:" + index + " res:" + test)
    }
  }
}

结果为:

index:3 res:pp
index:0 res:none
index:1 res:apple
index:0 res:none
index:0 res:none

2.类型模式匹配
 def main(args: Array[String]): Unit = {
    
    for (value <- List(9, 12.3, "Spark", "Hadoop", 'Hello)) {

      val str = value match {
        case i: Int => i + "是整型数据"
        case d: Double => d + "是浮点型数据"
        case "Spark" => "我是Spark"
        case s: String => s + "是字符串"
        case _ => "This is an unexpected value."
      }
      println(str)
    }
  }

结果是:

9 是整型数据
12.3 是浮点型数据
我是Spark
Hadoop 是字符串
This is an unexpected value.

3.样例类模式匹配

样例类是什么?

样例类也被称作case类,它与普通类相似,但是,当一个类被定义成为case类后,Scala会自动帮你实现一些函数,它就相当于经过优化的类

 定义方法如下:

case class 样例类名称(属性:类型,属性:类型,属性:类型....)

样例类的模式匹配
  def main(args: Array[String]): Unit = {
    
    //定义样例类
    case class phone(brand: String, price: Int)
    //对样例类赋值
    val hw = new phone("华为", 1000)
    val sx = new phone("三星",1100)
    val pg = new phone("苹果", 1110)
    val xlt = new phone("小灵通", 1111)

    for (car <- List(hw, sx, pg,xlt)) {
      car match {
        case phone("华为", 1000) => println("我是华为")
        case phone("三星",1100) => println("我是三星")
        case phone(brand, price) => println("我是:" + brand + " 我的价格为:" + price)
      }
    }
  }

结果为:

我是华为
我是三星
我是:苹果 我的价格为:1110
我是:小灵通 我的价格为:1111

4.option类
• 标准类库中的 Option 类型用 case 类来表示那种可能存在、也可能不存在的值。 • 一般而言,对于每种语言来说,都会有一个关键字来表示一个对象引用的是“无”,在 Java 中使用的是 null 。 Scala 融合了函数式编程风格,因此,当预计到变量或者函数返回值可能不会引用任何值的时候,建议你使用 Option 类型。 • Option 类包含一个子类 Some ,当存在可以被引用的值的时候,就可以使用 Some 来包含这个值,例如 Some("Hadoop") 。而 None 则被声明为一个对象,而不是一个类,表示没有值。

 option类可能有些抽象,所以使用代码来进行解释

  def main(args: Array[String]): Unit = {

    //首先创建一个字典类型的数据并且赋值
    val value = Map("age" -> 10, "name" -> "pp", "grade" -> 100)

    //从value中取出key为age的值,这个键是存在的,所以可以取出,取到的值在some中
    val age: Option[Any] = value.get("age")

    //value中并没有包含height这个键,所有这个取不到,只能取到none对象
    val height: Option[Any] = value.get("height")

    //还可以使用getOrElse方法
    // 在Option是Some的实例时返回对应的值,而在是None的实例时返回传入的参数

    val name: Option[Any] = value.get("name")
    val name1: Any = name.getOrElse("皮")

    val weight: Option[Any] = value.get("weight")
    val wg: Any = weight.getOrElse("60公斤")


    for (i <- List(age, height, name1,wg)) {
      println(i)
    }
  }

 结果是:

Some(10)
None
pp
60公斤

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/663574.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号