zoukankan      html  css  js  c++  java
  • 大数据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 循环(下次讲)

  • 相关阅读:
    聊聊WS-Federation
    用双十一的故事串起碎片的网络协议(上)
    责任链模式的使用-Netty ChannelPipeline和Mina IoFilterChain分析
    最小化局部边际的合并聚类算法(中篇)
    最小化局部边际的合并聚类算法(上篇)
    UVaLive 7371 Triangle (水题,判矩形)
    UVaLive 7372 Excellence (水题,贪心)
    POJ 3312 Mahershalalhashbaz, Nebuchadnezzar, and Billy Bob Benjamin Go to the Regionals (水题,贪心)
    UVa 1252 Twenty Questions (状压DP+记忆化搜索)
    UVa 10817 Headmaster's Headache (状压DP+记忆化搜索)
  • 原文地址:https://www.cnblogs.com/caiyishuai/p/13270525.html
Copyright © 2011-2022 走看看