Scala基础篇一(变量定义,控制台的输入输出,文件写入、文件读取、控制结构、数据结构、编写spark常用函数)

本文介绍了Scala的基础知识,包括变量定义、控制台输入输出、文件读写、控制结构和数据结构。此外,还讲解了如何在Scala中编写Spark常用函数,如过滤、遍历和映射操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Scala变量定义

两种(value和variable):

Val a:int=1   #变量不可变定义,类似于Java的final

Var a:int=1   #变量可变定义,可进行多次赋值

类型推断机制:

(定义变量时,可自动检测数据类型)

Val a=1  得到的是val a:int=1

Scala控制台的输入输出

使用import io.Stdin_包

输入:

var i=readInt() #整数的输入

var f=readFloat #浮点数的输入

var b=readBoolean #布尔类型的输入

var str=readLine("please input your name:")#字符串类型的输入

输出:

Print() #直接输出

Println()#输出后换行

Printf()#直接输出

(注意:输出字符串需要” ”,’ ’会出错)

Scala文件写入

使用import java.io.PrintWriter包

val outputFile = new PrintWriter("test.txt")  #建立写入对象

outputFile.println("Hello World")  #写入并换行

outputFile.print("Spark is good")  

outputFile.close()  #结束写入(注意必须要有此动作才能成功写入,因为写入操作是在内存中进行,若没有结束写入,数据在内存中没有被写入本地文件)

Scala 文件读取

使用scala.io.Source包

Import scala.io.Source

Val inputFile = Source.fromFile(“filename”) #定义对象变量

Lines = inputFile.getLines #读取数据,按行读取

For(Line<-Lines)println(Line) #循环输出,输出完变量就会置空

控制结构

1、For循环

for(变量<-表达式){语句块}

看不懂来点例子:

例1:

for(i<-1 to 5)println(i)

例2:

for(i<-1 to 5 if i%2==0)println(i)

例3:(多个生成器)

For(i<-1 to 5; j <-1 to 3)println(i*j)

2、For推导式:

for (变量 <- 表达式) yield {语句块}

来点例子

例1:

scala> val r = for (i <- Array(1,2,3,4,5) if i%2==0) yield { println(i); i}

2

4

r: Array[Int] = Array(2,4)

Scala数据结构

  1. 数组(Array):

Val myarr = new Array[int/String](3)

Scala可以自动检测数据类型

Val myarr = Array(12,25,33)

  1. 元组(Tuple):

Val tuple = (“bigData”,205,45.0)

索引出元组元素:

Println(tuple._1)#第一个元素,”bigData”

Println(tuple._2)#第二个

Println(tuple._3)#第三个

  1. Range类:

Val r = new Range(1,5,1)

创建一个从1到5的数值序列(不含终点5),步长为1

  1. 映射(Map):

一系列键值对的容器。键是唯一的,但值不一定是唯一的。可以根据键来对值进行快速的检索

例1:

Val myMap = Map(“XM”->”scala”,”xm1”->”scala1”)

Print(myMap(“XM”))  #显示键值对应内容

例2:使用contions判断键值是否存在

Val map1=if(myMap.contions(x))myMap(x) else 0

若键值不存在就补0.

  1. 迭代器(Iterator):

不是一个容器,而是提供了按顺序访问容器元素的数据结构

两个基本操作,next和hasNext。next可以返回迭代器的下一个元素,hasNext用于检测是否还有下一个元素。类似c中指针的一个东西。

例1:

val iter = Iterator("Hadoop","Spark","Scala")

while (iter.hasNext) {

    println(iter.next())

}

Scala编写spark常用函数

函数表达格式:

def 方法名(参数列表):结果类型={方法体}

def counter(value: Int): Int = { value + 1}

用定义变量的方式定义函数

val counter: Int => Int = value => value + 1  或

val counter = (value: Int) => value + 1

占位符语法

val add= (a: Int, b:Int) => a+b   //可以简化为如下:

val add = (_:Int) + (_:Int) //等价于(a:Int,b:Int)=>a+b,(‘_’可表示在表达式中只出现一次的变量)

Filter()函数:()跟boolan类型,判断

Array(1,2,3,4,5).filter(_>3)   //返回Array(4,5)

Foreach()函数:跟处理表达式,表示对每个元素遍历操作

List.foreach(i=>println(i))或list.foreach println

Map()函数:跟处理表达式,表示对每个元素遍历操作

books.map(s => s.toUpperCase)#将列表中每个字符串中的每个字母变成大写字母

Flatmap()函数:跟处理表达式,表示对每个容器的每个元素处理后再进行整合成同一个容器

val books =List("Hadoop","Hive","HDFS")

scala> books flatMap (s => s.toList)#toList()函数表示将每个字符串拆解成字符

res58: List[Char] = List(H, a, d, o, o, p, H, i, v, e, H, D, F, S)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@小白也疯狂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值