scala学习

参考教程:http://dblab.xmu.edu.cn/blog/spark/

从头开始学习,一天一部分。

(一)安装略
(二)scala基础

> 2.1、声明变量

Scala有两种类型的变量

val类型,是不可变的,在声明时就必须被初始化,而且初始化以后就不能再赋值

       scala> val myStr = "Hello World!"
                 myStr: String = Hello World!

var类型,是可变的,声明的时候需要进行初始化初始化以后还可以再次对其赋值

     scala> var myPrice : Double = 9.9
            myPrice: Double = 9.9       
> 打印(println()
        scala> println(myStr)
               Hello World!

_______________2017.02.01_________________________________________________________________________________________________________

> 2.2基本数据类型和操作

Scala的数据类型包括:Byte、Char、Short、Int、Long、Float、Double和Boolean。和Java不同的是,在Scala中,这些类型都是“类”,并且都是包scala的成员,比如,Int的全名是scala.Int。对于字符串,Scala用java.lang.String类来表示字符串。

这里要明确什么是“字面量”?字面量包括整数字面量、浮点数字面量、布尔型字面量、字符字面量、字符串字面量、符号字面量、函数字面量和元组字面量。举例如下:

scala

        val i = 123  //123就是整数字面量
        val i = 3.14 //3.14就是浮点数字面量
        val i = true //true就是布尔型字面量
        val i = 'A' //'A'就是字符字面量
        val i = "Hello" //"Hello"就是字符串字面量

Scala允许对“字面量”直接执行方法,比如:
scala

       5.toString() //产生字符串"5"
       "abc".intersect("bcd")  //输出"bc"

上面的intersect()方法用来输出两个字符串中都存在的字符。

>操作符

在Scala中,可以使用加(+)、减(-) 、乘(*) 、除(/) 、余数(%)等操作符,而且,这些操作符就是方法。例如,5 + 3和(5).+(3)是等价的,也就是说:

a 方法 b  

a.方法(b)

是等价的,前者是后者的简写形式,这里的+是方法名,是Int类中的一个方法。

需要注意的是,和Java不同,在Scala中并没有提供++和–操作符,当需要递增和递减时,可以采用如下方式表达:

    scala> var i = 5;
         i: Int = 5
    scala> i += 1  //将i递增
    scala> println(i)
         6

此外,也可以使用关系和逻辑操作,比如,大于(>)、小于(<)、大于等于(>=)和小于等于(<=),会产生Boolean类型的结果。true false

______________2017.03.2______________________________________________________________________________________

> Scala:Range

在执行for循环时,我们经常会用到数值序列,比如,i的值从1循环到5,这时就可以采用Range来实现。Range可以支持创建不同数据类型的数值序列,包括Int、Long、Float、Double、Char、BigInt和BigDecimal等。
在创建Range时,需要给出区间的起点和终点以及步长(默认步长为1)。下面通过几个实例来介绍:
(1)创建一个从1到5的数值序列,包含区间终点5,步长为1

scala> 1 to 5
res0: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5)

之前我们已经介绍过,在Scala中允许对“字面量”直接执行方法,所以,上面的代码,也可以用下面的代码来实现:

scala> 1.to(5)
res0: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5)

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

scala> 1 until 5
res1: scala.collection.immutable.Range = Range(1, 2, 3, 4)

(3)创建一个从1到10的数值序列,包含区间终点10,步长为2

scala> 1 to 10 by 2
res2: scala.collection.immutable.Range = Range(1, 3, 5, 7, 9)

(4)创建一个Float类型的数值序列,从0.5f到5.9f,步长为0.3f

scala> 0.5f to 5.9f by 0.8f
res3: scala.collection.immutable.NumericRange[Float] = NumericRange(0.5, 1.3, 2.1, 2.8999999, 3.6999998, 4.5, 5.3)

Scala:打印语句

在Scala编程中,经常需要用到打印语句。

print("My name is:")
print("Ziyu")

如果要每次打印后追加一个换行符,实现换行的效果,就要采用println语句,如下:

println("My name is:")
println("Ziyu")

如果要打印整型变量的值,可以使用下面语句:

val i = 7
println(i)

此外,Scala还带有C语言风格的格式化字符串的printf函数:

val i = 5;
val j = 8;
printf("My name is %s. I hava %d apples and %d eggs.\n","Ziyu",i,j)

上面语句执行后会得到如下结果:

My name is Ziyu. I hava 5 apples and 8 eggs.

Scala:读写文件

现在如何写入文本文件,以及如何读取文本文件。读写其他格式文件,可以参考其他网络资料自学。

写入文本文件
Scala需要使用java.io.PrintWriter实现把数据写入到文本文件。
假设当前正使用用户名hadoop登录Linux系统,打开Scala解释器进入命令提示符状态后,输入以下代码:

scala> import java.io.PrintWriter
import java.io.PrintWriter //这行是Scala解释器执行上面语句后返回的结果
scala> val out = new PrintWriter("output.txt")
out: java.io.PrintWriter = java.io.PrintWriter@25641d39  //这行是Scala解释器执行上面语句后返回的结果
scala> for (i <- 1 to 5) out.println(i)
scala> out.close()

上面代码中,new PrintWriter(“output.txt”)中只给出了文件名,并没有给出文件路径,这时,文件就会被保存到当前用户的工作目录下。
需要注意的是,必须要执行out.close()语句,才会看到output.txt文件被生成,如果没有执行out.close()语句,我们就无法看到生成的output.txt文件。
如果我们想把文件保存到一个指定的目录下,就需要给出文件out.txt路径。

读取文本文件中的行

可以使用Scala.io.Source的getLines方法实现对文件中所有行的读取。
仍然假设当前是用hadoop用户登录了Linux系统,并且使用scala命令启动了Scala解释器,现在,我们要把上面刚生成的、在hadoop用户工作目录下的output.txt文件读取出来,下面给出了完整的读取文件实例代码:

scala> import scala.io.Source
import scala.io.Source //这行是Scala解释器执行上面语句后返回的结果
scala> val inputFile = Source.fromFile("output.txt")
inputFile: scala.io.BufferedSource = non-empty iterator  //这行是Scala解释器执行上面语句后返回的结果
scala> val lines = inputFile.getLines //返回的结果是一个迭代器
lines: Iterator[String] = non-empty iterator  //这行是Scala解释器执行上面语句后返回的结果
scala> for (line <- lines) println(line)
1
2
3
4
5
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值