Spark学习scala语法

Posted lq13035130506

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spark学习scala语法相关的知识,希望对你有一定的参考价值。

一,变量

1,基本数据类型

技术图片

2,基本运算符

技术图片

3,定义变量

技术图片

4,复杂变量

技术图片

 (1)定义数组Array:

  •    声明:val aList=new Array[数据类型type](n):声明存储数据类型为type的n个对象,数组初始化为null
  •    声明:val aList=Array(n1,n2,n3...):声明时,可以不用声明数据类型。
  •    调用:aList(m):调用第m个元素。
  •    声明多维数组:val aList=Array.ofDim[数据类型](a,b):声明行为a,列为b的二维数组
  •    调用多维数组中的元素:aList(a1)(b1):调用数组中行为a1,列为b1的元素

(2)定义元组Tuple(对多个不同类型的对象的简单封装):

  •      声明: val tStudent=("name1",23,"男",560.00):声明元组类型学生的信息为(姓名,年龄,性别,月开销)
  •      调用:tStudent._1(取出"name1");tStudent._2(取出23);tStudent._3(取出"男")....

(3)定义容器Collection(导包scala.collection;scala.collection.mutable;scala.collection.immutable)

       scala.collection:封装了可变容器和不可变容器的通用操作的超类(从上到下依次继承都是特质(类似Java的接口),不是具体的容器

       技术图片  技术图片

         foreach方法:遍历当前容器内所有元素

(4)定义序列Sequence(如上图Seq有两个子序列:IndexedSeq和LinearSeq)有存入数据有先后顺序,可以重复

       LindearSeq:列表和队列可以继承该类

                        List(列表):具体的容器类,列表内的对象必须是同类型,列表内的值不可变(必须导包scala.collection.immutable)

                                          定义:val slPeople=List("张三","李四","王五"......)

                                          头部:head;尾部:tail    获取头部(第一个元素:slPeople.head);获取尾部(除去第一个元素以外的元素:slPeople.tail)

                                          向列表头添加新的元素从而生成新的列表:val  slNewList="赵四"::slPeople(不能给列表的尾添加元素)

                                          技术图片

 

                      Range(队列):是一种特殊的带索引的不可变数字等差序列(range内可以存放任何类型数据)

 

                                           定义:val irNum=new Range(n1,n2,m):与Python的range函数功能相同,n1(开始量)n2(结束量,取不到)m(步长)

 

                                            1 to  8  by 1:得到包括8的Range(1,8,1)序列

                                            1 until 8  by 1:得到Range(1,8,1)序列

                                         技术图片

       IndexedSeq:Vector和ArrayBuffer可以继承该类

 

                         Vector(向量):

 

                                               定义:val svPeople=Vector("张三","李四","王五"......)

 

                                               获取元素svPeople(n):获取第n+1个元素

                                               向Vector的头添加元素:svPeople1="赵四"+:"钱七"+:svPeople;向Vector的尾添加元素:val svPeople2=svPeople:+"孙八"

                                          技术图片

 

(5)定义集合Set:存放不重复元素,没有先后顺序,用哈希方法去查找元素(默认为不可变集合)

 

                    可变集:(导包scala.collection.mutable)

 

                    不可变集:(导包scala.collection.immutable)

import scala.util.control.Breaks._;
import scala.collection;
import scala.collection._;
import scala.collection.immutable._;   
var ssPeople=Set("张三","李四");     //Set("张三","李四")是不可变集,将不可变集赋给可变变量ssPeople
ssPeople+="王五";                   //将"王五"赋加给变量ssPeople后生成新的不可变集Set("张三","李四","王五")
import scala.collection.mutable._;    //要定义可变集必须导入这个包
val ssPeople1=Set("张三","李四");      //Set("张三","李四")是可变集,
ssPeople1+="王五";

                  技术图片

(6)定义映射Map:一系列键值对的容器,键唯一但值不唯一(默认为不可变映射)

                    可变映射:(导包scala.collection.mutable)

                    不可变映射:(导包scala.collection.immutable)

import scala.util.control.Breaks._;
import scala.collection;
import scala.collection._;
import scala.collection.immutable._;
var ssPeople=Map("姓名:"->"张三","年龄:"->16);     //不可变映射
import scala.collection.mutable._;    //要定义可变集必须导入这个包
val ssPeople1=Map("姓名:"->"张三","年龄:"->16);     //Set("张三","李四")是可变映射,
ssPeople1+=("性别"->"男","学号:"->20173522);   //向可变映射中添加多个元素
ssPeople1("姓名:")="李四";      //更新可变映射中的元素
ssPeople1("学校:")="石家庄铁道大学";    //向可变映射中添加单个元素
print("查询姓名");
var result=if(ssPeople1.contains("姓名:"))  ssPeople1("姓名:")  else  "无法查询姓名"  //当映射中存在键为"姓名:"则将对应的值赋给result,否则将无法查询xx赋给result
print(s"姓名:$result");

               技术图片

二,输入,输出

     1,从控制台输入(导包:scala.io.StdIn):

          技术图片

      2,输出(默认导包scala.Predef):

          (1)类Java的输出方式: print("姓名:"+name+" 年龄:"+age)或println("姓名:"+name+" 年龄:"+age)

          技术图片

          (2)类C的输出方式:printf("姓名:%s 年龄:%s",name,age)

         技术图片

         (3)s插值字符串输出法:print(s"姓名:$name 年龄:$age")

         技术图片

         (4) f插值字符串输出法(格式化):

         技术图片

三,读写文件(导包java.io.PrintWriter和scala.io.Source)

       1,写入(导包java.io.PrintWriter):向文件test.txt中写入信息:

            技术图片

           技术图片

       2,读取(导包scala.io.Source):

          技术图片

四,控制结构

     1,for结构:

        用法一:基本结构

       技术图片      技术图片

         用法二:for结构中加条件

         技术图片        技术图片

         用法三:支持多个生成器,用;隔开 

        技术图片

        用法四:将遍历的值付给变量

        技术图片

       技术图片

   2,异常处理(try......catch.....)

   3,循环控制(不存在break和continue终止循环)

        使用Breaks类(导包scala.util.control)

       当使用breakable方法:

import scala.util.control.Breaks._;
var i=0;
val array=Array(1,3,6,15,9,12,16);
breakable{      //这个大括号不能换行
    for(i<-array)
    {
        if(i>10) break;   //循环到15直接跳出循环
        print(i+"	");
    }
}

       技术图片

   4,判断值是否存在:contains()

以上是关于Spark学习scala语法的主要内容,如果未能解决你的问题,请参考以下文章

Spark学习scala语法

Spark记录-Scala基础语法

Spark基础学习笔记12:Scala内建控制结构

Spark Scala - 拆分字符串语法问题

Scala学习之一 Scala基础语法

2021年大数据常用语言Scala:基础语法学习 方法调用方式