pythonspark教程菜鸟教程_从零开始学习Spark(⼆)Scala基
Scala基础
Spark的原⽣语⾔是Scala,因此⼊门⼀下Scala是学习Spark的第⼀步,下⾯就快速⼊门⼀下,争取不花太多的时间。之后的简书中还会有Scala进阶,交代⼀些其他特性。这篇Scala基础应该可以暂时应付之后Spark的学习。
Scala运⾏在JVM上
Scala是纯⾯向对象的语⾔
Scala是函数式编程语⾔
Scala是静态类型语⾔
1. HelloWorld
object HelloWorld {
def main(args: Array[String]): Unit = {
println("Hello, world!")
}
}
2. 交互式编程与脚本形式
交互式编程进⼊⽅式有两种,terminal中输⼊scala,或者输⼊sbt再输⼊console
脚本形式则类似Java的编译形式
$ scalac HelloWorld.scala
$ scala HelloWorld.scala
scalac编译⽣成.class⽂件,注意可以跳过这⼀步,直接使⽤scala来执⾏
3. Scala包
定义包
package com.runoob
class HelloWorld
第⼆种定义包的⽅法,可以⼀个⽂件中定义多个包
package com.runoob {
class HelloWorld
}
源⽂件的⽬录和包之间并没有强制的关联关系。你不需要将Employee.scala放在com/horstmann/impatient⽬录当中
必利劲是个package com {
package horstmann {
package impatient {
class Manager
......
}
}
}
引⽤包
import com.runoob.HelloWorld
import java.awt._ //引⼊包内所有成员
注意scala中类和对象⼀般⽤⼤写字母开头
4. Scala变量与数据类型
数据类型php编程技术培训
只罗列⼏个特殊的,注意所有的数据类型都是对象
Byte, Short, Int(默认), Long, Float, Double(默认), Char, String
Unit 表⽰⽆值,和其他语⾔中void等同。⽤作不返回任何结果的⽅法的结果类型。Unit只有⼀个实例值,写成()。
Null null 或空引⽤
Nothing Nothing类型在Scala的类层级的最低端;它是任何其他类型的⼦类型。
Any Any是所有其他类的超类
AnyRef AnyRef类是Scala⾥所有引⽤类(reference class)的基类
变量和常量
在 Scala 中,使⽤关键词 "var" 声明变量,使⽤关键词 "val" 声明常量
var myVar: String = "Foo"
var myVar2: Int //变量声明不⼀定要初始值
val myVal: String = "Too" //常量不能修改
var myVar = 10; //常量和变量的声明不⼀定要指明数据类型,编译器会⾃⼰推断
val myVal = "Hello, Scala!";
还可以声明⼀个元组,变量常量都可以
scala> val pa = (40,"Foo")
pa: (Int, String) = (40,Foo)
5. Scala访问修饰符
Scala访问权限
private:仅在包含了成员定义的类或对象内部可见。Java中允许这两种访问,因为它允许外部类访问内部类的私有成员。class Outer{
class Inner{
private def f(){println("f")}
正则表达式匹配连续5个数字
class InnerMost{
f() // 正确
}
}
(new Inner).f() //错误
}
protected:只允许保护成员在定义了该成员的的类的⼦类中被访问。⽽在java中,⽤protected关键字修饰的成员,除了定义了该成员的类的⼦类可以访问,同⼀个包⾥的其他类也可以进⾏访问。
package p{
class Super{
protected def f() {println("f")}
}
class Sub extends Super{
f()
}
class Other{
(new Super).f() //错误
}
}
public:Scala中,如果没有指定任何的修饰符,则默认为 public。这样的成员在任何地⽅都可以被访问。
JAVA的访问权限表
public--都可访问(公有)
protected--包内和⼦类可访问(保护)
不写(default)--包内可访问 (默认)
private--类内可访问(私有)
作⽤域保护
private[x] 或 protected[x]
这⾥的x指代某个所属的包、类或单例对象。如果写成private[x],读作"这个成员除了对[…]中的类或[…]中的包中的类及它们的伴⽣对像可见外,对其它所有类都是private。
6. 运算符,条件,循环
和JAVA基本相同,举⼏个for循环使⽤的例⼦
for( a
println( "Value of a: " + a );
}
until表⽰不包含后⾯的值
for( a
println( "Value of a: " + a );
}
在 for 循环 中你可以使⽤分号 (;) 来设置多个区间,它将迭代给定区间所有的可能值。for( a
println( "Value of a: " + a );
println( "Value of b: " + b );
}collapse是什么意思中文
for 循环会迭代所有集合的元素
val numList = List(1,2,3,4,5,6);
for( a
println( "Value of a: " + a );
}
for循环还可以加⼊条件过滤
val numList = List(1,2,3,4,5,6,7,8,9,10);
// 下⾯的代码会输出1,2,4,5,6,7
for( a
if a != 3; if a < 8 ){
println( "Value of a: " + a );
}
利⽤yield来产⽣集合,和python不⼀样的
val numList = List(1,2,3,4,5,6,7,8,9,10);
// 下⾯的代码会输出1,2,4,5,6,7
var retVal = for( a
if a != 3; if a < 8 )yield a
retVal: List[Int] = List(1, 2, 4, 5, 6, 7)
7. 函数
声明
def functionName ([参数列表]) : [return type]
定义
def functionName ([参数列表]) : [return type] = {
function body
return [expr]
抖音python入门教程}
如果函数没有返回值,可以返回为 Unit,这个类似于 Java 的 void
例⼦
object Test {
def main(args: Array[String]) {
println("Hello\tWorld\n\n")
println("3 + 4 = " + add(3, 4))
}
def add(a: Int, b: Int): Int = {
var sum: Int = a + b
return sum
}
}
8. 函数⾼级特性
传名调⽤
传名调⽤(Call-by-name):参数传⼊时,不事先计算,⽽是将表达式⼦代⼊其中传⼊参数时要⽤=>
object Test {
def main(args: Array[String]) {
组织架构图用什么软件做好delayed(time());
}
def time() = {
println("获取时间,单位为纳秒")
System.nanoTime
}
def delayed( t: => Long ) = {
println("在 delayed ⽅法内")
println("参数: " + t)
t
}
}
这个时候,相当于函数中的每个t都编程time(),所以输出会变成
在 delayed ⽅法内
获取时间,单位为纳秒
参数: 241550840475831
获取时间,单位为纳秒

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。