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+"\t年龄:"+age)或println("姓名:"+name+"\t年龄:"+age)

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

(3)s插值字符串输出法:print(s"姓名:$name\t年龄:$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+"\t");
    }
}

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

原文地址:https://www.cnblogs.com/lq13035130506/p/12207112.html

时间: 2024-10-11 15:08:55

Spark学习(二)scala语法的相关文章

spark学习二

SparkContext是编写Spark程序用到的第一个类,是Spark的主要入口点,用于连接Spark集群.创建RDD.累加器和广播变量,是Spark程序的根本.编写不同类型的Spark程序,使用的SparkContext是不同的Scala 使用SparkContextJava   使用JavaSparkContext 开发一个简单的Spark程序:第一步:创建SparkConf对象,设置Spark应用的配置信息第二步:创建Spark Context对象第三步:针对输入源创建一个初始的RDD(

Spark学习之scala编程

一.Scala语言基础 1.Scala语言简介 Scala是一种多范式的编程语言,其设计的初衷是要集成面向对象编程和函数式编程的各种特性.Scala运行于Java平台(Java虚拟机),并兼容现有的Java程序. 学习Scala编程语言,为后续学习Spark奠定基础. 2.为什么要学Scala l 优雅:这是框架设计师第一个要考虑的问题,框架的用户是应用开发程序员,API是否优雅直接影响用户体验. l 速度快:Scala语言表达能力强,一行代码抵得上Java多行,开发速度快:Scala是静态编译

大数据Spark学习:Scala基础第一课

计划: 阶段1: 精通Spark内核 阶段2: 精通千万级的项目 阶段3: 机器学习 JAVA本身不是伟大的语言,伟大的是JVM,构件分布式平台什么的,依赖的是JVM,不一定要JAVA语言 可认为Scala是JAVA的升级语言,JAVA是支持面向对象的语言,而非纯面向对象的语言.Scala是一切皆对象, 是纯面向对象语言.面向对象结合函数式编程. 不可变变量声明val result = 10+2  不可再次赋值,分布式数据的时候,传输数据.校验数据等不想改变这个数据 可变变量var name =

spark实验(二)--scala安装(1)

一.实验目的 (1)掌握在 Linux 虚拟机中安装 Hadoop 和 Spark 的方法: (2)熟悉 HDFS 的基本使用方法: (3)掌握使用 Spark 访问本地文件和 HDFS 文件的方法. 二.实验平台 操作系统:centos6.4: Scala版本:2.10.6.: Hadoop 版本:2.7.6. 三.实验过程 首先根据这篇博文https://www.cnblogs.com/Genesis2018/p/9079787.html安装Scala 输入wget http://downl

spark 学习(二) RDD及共享变量

声明:本文基于spark的programming guide,并融合自己的相关理解整理而成 Spark应用程序总是包含着一个driver program(驱动程序),它执行着用户的main方法,并且执行大量的并行操作(parallel operations)在集群上. 概述 Spark最主要的抽象就是RDD(resilient distributed dataset) 弹性分布式数据集,RDD  就是分割元素的集合,他被分发在集群的各个节点上,并且能够进行并行操作. RDD的创建有三种方式: H

Scala学习(二)--- 控制结构和函数

控制结构和函数 摘要: 本篇主要学习在Scala中使用条件表达式.循环和函数,你会看到Scala和其他编程语言之间一个根本性的差异.在Java或C++中,我们把表达式(比如3+4)和语句(比如if语句)看做两样不同的东西.表达式有值,而语句执行动作.在Scala中,几乎所有构造出来的语法结构都有值.这个特性使得程序更加精简,也更易读.本篇的要点包括: 1. 表达式有值 2. 块也有值,是它最后一个表达式的值 3. Scala的for循环就像是"增强版"的Java for循环 4. 分号

大数据学习:Scala面向对象和Spark一些代码读和问

画外音: Spark对面向对象的支持是非常完美的 主题: 1.简单的类: 2.重写getter.setter方法: 3.利用其它方法来控制外部对值的控制: 4. private[this]: 5.构造器以及构造器相关: 直接代码见真章: ==========最简单的类============ scala> class HiScala{ | private var name = "Spark" | def sayName(){println(name)} | def getName

Spark学习之路 (十六)SparkCore的源码解读(二)spark-submit提交脚本

讨论QQ:1586558083 目录 一.概述 二.源码解读 2.2 find-spark-home 2.3 spark-class 2.4 SparkSubmit 正文 回到顶部 一.概述 上一篇主要是介绍了spark启动的一些脚本,这篇主要分析一下Spark源码中提交任务脚本的处理逻辑,从spark-submit一步步深入进去看看任务提交的整体流程,首先看一下整体的流程概要图: 回到顶部 二.源码解读 2.1 spark-submit # -z是检查后面变量是否为空(空则真) shell可以

Spark学习之路 (二)Spark2.3 HA集群的分布式安装[转]

下载Spark安装包 从官网下载 http://spark.apache.org/downloads.html 从微软的镜像站下载 http://mirrors.hust.edu.cn/apache/ 从清华的镜像站下载 https://mirrors.tuna.tsinghua.edu.cn/apache/ 安装基础 Java8安装成功 zookeeper安装成功 hadoop2.7.5 HA安装成功 Scala安装成功(不安装进程也可以启动) Spark安装过程 上传并解压缩 [[email

Spark学习笔记0

自学Spark已经有一段时间,之前遇到了很多阻力,从Scala语法,基本概念,源码编译,环境部署,开发环境只能自己慢慢尝试,几乎是一步一个跟头.当还在痛苦的读着源码时候,发现spark的版本还在不断的升级,新的东西越来越多,让人应接不暇.偶然间发现51CTO的相关资源,希望共享给同时Spark的学习者们,避免他们再走我走过的弯路.也希望开始将自己学习Spark的过程记录下来. 王家林的第一个中国梦:免费为全社会培养100万名优秀的大数据从业人员! 您可以通过王家林老师的微信号1861008685