一.Scala应用特点
在大数据开发中,scala编程语言应用广泛,Spark计算引擎底层就是使用scala语言编写的,因此使用scala编写Spark程序非常方便。Scala相比Java,其是完全面向对象的,支持函数式编程和链式编程,代码简洁度大大提高。Flink也支持Scala语言。下面是一个计算WordCount的例子:
val result = textRDD.map(row => row.replace(",", ""))//去除文字中的,防止出现歧义 .flatMap(row => row.split(" "))//把字符串转换为字符集合 .map(row => (row, 1))//把每个字符串转换为map,便于计数 .reduceByKey(_+_)//计数
在大数据分析中,类的继承,单例模式等Java常见的功能使用较少,一般都是做数据处理。
二.概念
类是对象的抽象,而对象是类的具体实例。类是抽象的,不占用内存,而对象是具体的,占用存储空间。类是用于创建对象的蓝图,它是一个定义包括在特定类型的对象中的方法和变量的软件模板。
三.代码实战
//定义私有的构造方法class Marker private(val color : String){ override def toString() : String = "marker color " + color } object Marker{ private val markers = Map( "red" -> new Marker("red"), "blue" -> new Marker("blue"), "green" -> new Marker("green") ) def apply(color : String) = if(markers.contains(color)) markers(color) else null } object Main{ def main (args: Array[String]) { println(Marker("blue")) println(Marker("green")) println(Marker("red")) println(Marker("white")) }}
私有类不能使用new创建实例,否则会报错:
val marker = new Marker("haha")
Error:(33, 18) constructor Marker in class Marker cannot be accessed in object Main
Scala中的类不用显式声明为public,一个Scala源文件中可以有多个类。
以上实例的类定义了一个变量 color ,一个方法:toString,该方法返回值为一个字符串。
Scala 的类定义可以有参数,称为类参数,如上面的 color ,类参数在整个类中都可以访问。
伴生类和其伴生对象相互伴生,且名称必须相同。
四.执行结果
![d1f8569d71fb095d2a2ac2f0141a9f42.png](https://i-blog.csdnimg.cn/blog_migrate/c29a7da81bfa3d2f7173e2ceb0333890.jpeg)
![f1d8fae77bc3bb9282aae2868d57c761.png](https://i-blog.csdnimg.cn/blog_migrate/db8fb8dc84b7950d41158e4b2ccaa32e.jpeg)