spark生态1--scala语言快速入门(为学习spark而学scala)

目录

Scala

一:Scala介绍以及Scala安装使用

1.1 Scala6个特征。

1.2 windows安装,配置环境变量

1.3 linux环境下scala的安装

二:Scala基础

2.1 数据类型

2.2 变量和常量的声明

2.3 注意问题

2.4 循环语句

三.Scala方法与函数

3.2递归方法

3.3 有默认值的方法

3.4 可变参数的方法

3.5匿名函数

3.6 嵌套函数 

3.7偏应用函数

3.8 高阶函数

3.9 柯里化函数

四.字符串

五.集合

5.1 数组

5.2 list

5.3 set

5.4 map

5.5 元组

六. trait  特性

七.模式匹配

八.样例类(case classes)

十.Actor Model

十一:实际应用--统计词频


前言:

Scala是一门很费脑子的语言,不是必要的话,请谨慎入坑(个人感受)

Scala

一:Scala介绍以及Scala安装使用

1.1 Scala6个特征。

       1).Java和scala可以混编

       2).类型推测(自动推测类型)

       3).并发和分布式(Actor)

       4).特质,特征(类似java中interfaces 和 abstract结合)

       5).模式匹配(类似java switch)

       6).高阶函数

1.2 windows安装,配置环境变量

  1. 新建SCALA_HOME
  2. 上个步骤完成后,编辑Path变量,在后面追加如下:;%SCALA_HOME%\bin;%SCALA_HOME%\jre\bin
  3. 打开cmd,输入:scala  - version  看是否显示版本号,确定是否安装成功
  4. idea 中配置scala插件

 

1)打开idea,close项目后,点击Configure->Plugins

2)搜索scala,点击Install安装

3)设置jdk,打开Project Structure,点击new 选择安装好的jdk路径

4)创建scala项目,配置scala sdk(Software Development Kit)

补充:如何在项目中运行一个scala代码:new 新建一个Scala的object而不是class

1.3 linux环境下scala的安装

访问Scala官网(官网),下载Scala。登录后,官网会自动识别你的操作系统类型,如果是Linux操作系统,

官网会自动提供.tgz格式的安装包,比如,笔者于2016年10月31日登录官网,可以下载到scala-2.11.8.tgz(文件大小是27.3MB)。

这里假设scala-2.11.8.tgz被下载到“~/下载/”目录下面,其中,“~”表示当前用户的工作目录,比如,

如果当前你正在使用用户名hadoop登录Linux系统,那么,当前用户的工作目录就是“/home/hadoop/”。
在Linux操作系统中安装Scala的过程如下。
首先要指定Scala的安装目录,比如,这里我们选择安装在“/usr/local/”目录下,这里假设当前用户登录名是hadoop。
然后,把刚才下载的scala-2.11.8.tgz文件解压缩到“/usr/local/”目录下,修改文件夹名称,并为hadoop用户赋予权限,具体如下:

sudo tar -zxf ~/下载/scala-2.11.8.tgz -C /usr/local # 解压到/usr/local中
cd /usr/local/
sudo mv ./scala-2.11.8/ ./scala # 将文件夹名改为scala
sudo chown -R hadoop ./scala # 修改文件权限,用hadoop用户拥有对scala目录的权限

Shell 命令

接着需要把scala命令添加到path环境变量中。这里我们在 ~/.bashrc 中进行设置。可以采用vim编辑器打开.bashrc文件:

vim ~/.bashrc

Shell 命令

打开vim编辑器以后,需要键盘敲击输入一个字母i,进入编辑状态,然后才能修改内容。
然后,在.bashrc文件的最开头位置,修改path环境变量设置,把scala命令所在的目录“/usr/local/scala/bin”增加到path中,具体如下:

export PATH=$PATH:/usr/local/scala/bin

注意,上面的PATH和等号之间,不要加入任何空格,否则会出错。
修改后,保存退出(方法是:首先,按键盘Esc键,退出vim的编辑状态,然后,敲击键盘输入“:wq”三个英文字母,然后回车,即可保存退出)。

接着还需要让该环境变量生效,执行如下代码:

source ~/.bashrc # 使变量设置生效

Shell 命令

设置好后我们来检验一下是否设置正确,可以输入scala命令:

scala

Shell 命令

输入scala命令以后,屏幕上显示scala和Java版本信息,并进入“scala>”提示符状态,就可以开始使用Scala解释器了,你就可以输入scala语句来调试程序代码了。

二:Scala基础

2.1 数据类型

2.2 变量和常量的声明

1)定义变量

  • 定义变量或者常量的时候,也可以写上返回的类型,一般省略,如:val a:Int = 10
  • 常量不可再赋值

变量 : var 定义 ,可修改

常量 : val 定义,不可修改

    /**
     * 定义变量和常量
     * 变量 :用 var 定义 ,可修改
     * 常量 :用 val 定义,不可修改
     */
    var name = "zhangsan"
    println(name)
    name ="lisi"
    println(name)
    val gender = "m"
    //gender = "m"//错误,不能给常量再赋值

2)创建对象


class Person{
  val name = "zhangsan"
  val age = 18
  def sayName() = {
    "my name is "+ name
  }
}


object Lesson_Class {
   def main(args: Array[String]): Unit = {
       val person = new Person()
       println(person.age);
       println(person.sayName())
  }
}

3)apply :如果在创建Object时传入参数,那么会自动根据参数的个数去Object中寻找相应的apply方法

/**

  * object 单例对象中不可以传参,

  * 如果在创建Object时传入参数,那么会自动根据参数的个数去Object中寻找相应的apply方法

  */

  object Lesson_ObjectWithParam {

  def apply(s:String) = {

    println("name is "+s)

  }

  def apply(s:String,age:Int) = {

    println("name is "+s+",age = "+age)

  }

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

    Lesson_ObjectWithParam("zhangsang")

    Lesson_ObjectWithParam("lisi",18)

  }

}


4)伴生类和伴生对象

class Person(xname :String , xage :Int){
  var name = Person.name
  val age = xage
  var gender = "m"
  def this(name:String,age:Int,g:String){
    this(name,age)
    gender = g
  }
  def sayName() = {
    "my name is "+ name
  }
}



object Person {
  val name = "zhangsanfeng"
  def main(args: Array[String]): Unit = {
    val person = new Person("wagnwu",10,"f")
    println(person.age);
    println(person.sayName())
    println(person.gender)
  }
}

2.3 注意问题

  1. 建议类名首字母大写 ,方法首字母小写,类和方法命名建议符合驼峰命名法。
  2. scala 中的object是单例对象,相当于java中的工具类,可以看成是定义静态的方法的类。
  3. object不可以传参数。另:Trait不可以传参数
  4. scala中的class类默认可以传参数,默认的传参数就是默认的构造函数。

重写构造函数的时候,必须要调用默认的构造函数。

  1. class 类属性自带getter ,setter方法。
  2. 使用object时,不用new,使用class时要new ,并且new的时候,class中除了方法不执行,其他都执行。
  3. 如果在同一个文件中,object对象和class类的名称相同,则这个对象就是这个类的伴生对象,这个类就是这个对象的伴生类。可以互相访问私有变量。[

2.4 循环语句

1)if else

 /**

     * if else

     */

    val age =18
    if (age < 18 ){
      println("no allow")
    }else if (18<=age&&age<=20){
      println("allow with other")
    }else{
      println("allow self")

    }

2)for ,while,do…while

      to和until 的用法(不带步长,带步长区别)

       1 to 10 返回110Range数组,包含10

     * 1 until 10 返回110 Range数组 ,不包含10

 

    for(i <- 1 to 10){
      println(i)
    }
     9 9 乘法表
    for(i <- 1 until 10){
      for(j <- 1 until 10){
        if(i>=j){
          print(i + " * "+j + " = "+ i*j+"\t")
        }
      }
      println()
    }

     for 里面加条件
    for( i <- 1 to 1000;if(i>500);if(i%2==0)){
      println(i)
    }

    val res = for(i <- 1 to 100 if(i>50)  if(i%2==0)) yield i
    print(res)
    var i=0
    while(i<20){
      print(s"第 $i 次求婚")
      i+=1;
    }

   for循环

   //可以分号隔开,写入多个list赋值的变量,构成多层for循环

    //scala

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值