大数据Hadoop第九周——Scala开发环境搭建+Scala语言值变量类型表达式

大数据第9

1.Scala开发环境搭建

  • 目前具备全部功能的集成开发环境只有Idea。
  • 下载解压idea:tar -zxvf ideaIE-2019.3.3.tar.gz。
  • 进入bin目录,执行:./idea.sh。
  • 选择新建一个project。

  • 接着按如下界面选择。

  • 进入如下界面。输入Project name。

  • JDK选择我们hadoop系统使用的同一个软件包:点击JDK栏右侧的“New”,在界面中选择我们使用的jdk1.8文件夹,然后点击“OK”。

  • 点击“Scala SDK”右侧的 “Create”,如果在以下界面中有scala显示,那么检查版本号是否与我们使用的(2.11.12)相同,如果相同,可以直接选择,如果不同,点击下方“Browse”。

  • 选择我们使用的Scala软件包的文件夹,点击下方“OK”。

  • 项目建立后,点击项目界面左侧的“src”。因为我们将在src下建立文件。

  • 在主菜单点击“New”,选择“Scala Class”。

  • 跳出如下界面,要在在界面中选择“Object”,输入名字后回车。不要选“Class”。Scale的顺序是project,然后object,要有object才可以运行,与java不同。

  • 若要调字体大小等,点击在“File”菜单里的“Setting”,在“Editor”的“Font”下更改,如图所示。

  • 在界面中输入一段程序,写入main,选择“main”会自动建立一个function。下入一段程序。鼠标光标点在程序上,点击右键,选择“Run”。

  • 结果显示如下图:

 2.SCALA语言简介

2.1值和变量

  • 值:val

变量:var

“值”类型声明后不可以更改数值,而“变量”类型可以。

  • 声明时可以指定数值类型,也可以不指定,不指定时系统会自动判定。
  • 指定类型方式:用冒号“:”:例如:val c:Float=5。
  • 注意对大小写敏感。声明时如果不指定数据类型,则根据初始化的字面量,系统自动进行判断,判断的原则是:

  • 数值类型在计算中可以进行自动转换,如果计算的数值类型不同,将向高级的数值类型自动转换,而不会向低级的数据类型进行转换。

  • 如果要手工转换数据类型,使用toType方法。如果转成Int型是toInt,转成Float型是toFloat。

    1. Scala类型
  • C和Java基本类是Object,而Scala是Any。它包括数值类型和引用类型。如下图所示。

2.3 String类型

  • String类型都是引用类型。
  • 要在String中加入值或变量,更直接的一种方式是利用字符串内插。
  • 字符串内插:在字符串中插入变量,显示为变量的值,用“$”。

 3.Scala的表达式

3.1表达式的返回值

  • Scala语言的表达式返回值不是用return语句,而是最后执行的那一句就是返回语句。
  • 如图在“{}”中的是一句表达式,最后执行的那一句“a”、“b”、“c”就是返回语句。这是Scala区别于其它语言的较大的不同点,其它语言一般都用“return”返回。

如果没有“{}”那就说明不是一句表达式,每一句表达式都会有返回。变量“resA”只是用来存储表达式的返回值。

3.2 if表达式

  • Scala只有if,else,没有其他语言常用的if,else if,else if,else格式。没有“?”表达式语句,比如java中的System.exit(job.waitForCompletion(true) ? 0 : 1);。

3.3 匹配表达式

  • 类似其他语言的case语句。

object testScala {
  def main(args: Array[String]): Unit = {
    val x=10; val y=20
    val max=x>y match{
        case true =>println(s"Received data is $x.");x
        case false =>println(s"Received data is $y.");y
    }
    println(s"The max is $max.")
  }
}
  • 通配模式匹配,用“other”或“_”。

object testScala2 {
  def main(args: Array[String]): Unit = {
    var message="OK"
    val status = message match {
        case "OK" => 200
        case other => {
          println(s"Couldn't parse $other")
          -1
        }
    }
    println(s"status is $status")
    message="hhh"
    val status2 = message match {
      case "OK" => 200
      case other => {
        println(s"Couldn't parse $other")
        -1
      }
    }
    println(s"status2 is $status2")
  }
}
  • 模式哨卫匹配。
  • 第一个例子:

object testScala3 {
  def main(args: Array[String]): Unit = {
    val response:String="OK"
    val res=response match{
      case s if s!=null =>println(s"Received s is $s.");s
      case s =>println(s"Other $s");
    }
    println(s"The res is $res.")
  }
}
  • 第二个例子:

object testScala4 {
  def main(args: Array[String]): Unit = {
    val x:Int=12180
    val y:Any=x
    val res=y match{
      case x:String =>println(s"$x.");x
      case a:Float =>println(s"$a%.2f.");a
      case b:Double =>println(s"$b..2f.");b
      case c:Long =>println(s"${c}l.");c
      case d:Int =>println(s"${d}i.");d
    }
    println(s"The res is $res.")
  }
}

3.4 循环(下次讲)

posted on 2020-04-26 14:24  蔡军帅  阅读(130)  评论(0编辑  收藏  举报