0.什么是Scala?

 ​   Scala是运行在 JVM 上的多范式编程语言, 同时支持面向对象和面向函数编程,早期, scala刚出现的时候, 并没有怎么引起重视, 随着Spark和Kafka这样基于scala的大数据框架的兴起, scala逐步进入大数据开发者的眼帘。 scala的主要优势是它的表达性。

1.为什么使用scala?


  1. 开发大数据应用程序(Spark程序、 Flink程序)
  2. 表达能力强, 一行代码抵得上Java多行, 开发速度快
  3. 兼容Java, 可以访问庞大的Java类库, 例如: 操作mysql、 redis、 freemarker、 activemq等等

3.scala对比Java

下面通过两个案例, 分别使用java和scala实现的代码数量

3.1案例一

定义三个实体类(用户、 订单、 商品),Java代码如下:

/**
* 用户实体类
*/
public class User {
private String name;
private List<Order> orders;
public String getName() {
return name;
} p
ublic void setName(String name) {
this.name = name;
} p
ublic List<Order> getOrders() {
return orders;
} p
ublic void setOrders(List<Order> orders) {
this.orders = orders;
}
} /
**
* 订单实体类
*/
public class Order {
private int id;
private List<Product> products;
public int getId() {
return id;
} p
ublic void setId(int id) {
this.id = id;
} p
ublic List<Product> getProducts() {
return products;
} p
ublic void setProducts(List<Product> products) {
4this.products = products;
}
} /
**
* 商品实体类
*/
public class Product {
private int id;
private String category;
public int getId() {
return id;
} p
ublic void setId(int id) {
this.id = id;
} p
ublic String getCategory() {
return category;
} p
ublic void setCategory(String category) {
this.category = category;
}
}

scala代码如下:

case class User(var name:String, var orders:List[Order]) // 用户实体类
case class Order(var id:Int, var products:List[Product]) // 订单实体类
case class Product(var id:Int, var category:String) // 商品实体类

3.2 案例2

有一个字符串(数字) 列表, 我们想将该列表中所有的字符串转换为整数。

Java代码如下:
// 创建一个Integer类型的列表
List<Integer> ints = new ArrayList<Integer>();
for (String s : list) {
ints.add(Integer.parseInt(s));
}
scala代码
val ints = list.map(s => s.toInt)

3.3 Java 和Scala底层执行原理

Scala系列1:为什么大数据需要学习Scala?_大数据

尖叫提示:​scala程序运行需要依赖于Java类库,必须要有Java运行环境,scala才能正确执行。根据上述流程图,要编译运行scala程序,需要


  1. jdk(jvm)
  2. scala编译器(scalaSDK)