Scala为什么是大数据第一高薪语言
“ Scala为什么是大数据第一高薪语言。”
大数据大数据为什么要用Scala呢?我们希望程序更简洁,更易读,更不容易出错,充分利用现代处理器的多核特性,可以相对容易地实现分布式应用。
专家推荐
Groovy创始人James Strachan曾经说过:
我认为将来可能替代Java的就是Scala 。它实在太让我印象深刻了。我甚至可以诚实地说,如果有人在2003年把那本《Programming in Scala》拿给我看了的话,那我根本就不会再去发明Groovy了。
JavaOne会议期间,在一个参加的讲座中有人向Java之父James Gosling提了一个有意思的问题:
除了Java之外,你现在还使用JVM上的那些语言?"
Java之父的回答很迅速同时也很让人意外
Scala
编程范式
Scala和其他很多语言根本的区别就是它融合了面向对象和函数式编程这两种编程范式。
Scala是一个纯面向对象的。和Java有primitive type不同,Scala所有东西都是对象。你可以使用所有熟悉的面向对象的编程范式和和模式。不仅如此,Scala对于面向对象有不少创新的贡献。例如Scala中特质(trait)的概念。它类似于Java中的接口(Interface),但是可以具有方法实现和字段。一个对象可以混入(mixin)多个特质。它比多继承(比如C++) 更加灵活,同时也没有多继承中二义性的问题。
Scala是函数式的。函数式编程不是一个新的概念,50年代的Lisp就是函数式编程的始祖。此后,又有Scheme,Haskell,F#等后来者。但是函数式编程一直十分小众,直到最近几年大数据爆发才突然流行。下面简单介绍一下函数式编程的基本概念,和其流行的原因。
在函数式编程中,函数是一等公民。和int,string一样,你可以将函数作为参数传递给另一个函数,将函数作为返回值。这样做的一个好处是程序更加简洁易读。另外,函数可以事先定义,稍后触发。这也是目前最为流行的事件驱动(event driven)或者反应式(reactive)编程的基本应用场景。
在函数式编程中,数据的操作是将输入映射为输出,而不改变任何输入。这样immutable的方法杜绝了side effect。如果你读过Effective Java,应该记得很多地方讨论过immutable的好处。在函数式编程的世界里,immutablity是默认的。当然,很多时候这样的方式会带来数据的拷贝和浪费。然而,随着计算和存储能力的不断提高,immutable编程的优势会逐步凸显。此外,和一些纯函数的语言不同,Scala也允许mutable的值,使得编程十分灵活。
具体特性
Scala可以和Java很好的衔接和无缝的扩展。Scala可以使用所有的Java库,同时对于一些Java类做了无缝的扩展。例如你可以使用str.toInt
而不是包装类Integer.parseInt(str)
。
Scala更加简洁。一个方面它尽量避免使用Java中的重复代码,比如无穷无尽的get和set。另一方面,丰富的库函数和函数式编程的结合,使得很多操作的实现异常简练。比如,要检验一个名字中是否含有大写字母,只需要一行代码:
val nameHasUpperCase = name.exists(_.isUpper)
Scala是静态类型的语言。具备所有静态类型的优势如编译时类型检查,安全重构,代码即文档。另一方便,Scala同时在你不给出类型时,可以“聪明”地推断类型。一定程度上具备动态类型语言的灵活性。
应用趋势
Scala是个通用的编程语言。目前其Web Framework 方面,Play已经在很多企业得到应用。
Scala的Akka也被不少企业应用于大型分布式应用的开发。
大数据领域的新星Flink, Spark, Kafka等就是用Scala编写的。
Twitter内部应用大量使用Scala。在国内,使用Scala Play webframework的公司还不是很多。
但可以预见,Scala将会越来越流行,会成为未来的黄金语言。虽然Java 8的一些新特性和Scala很相似,但也有它的局限。
不可否认,Scala的学习曲线相对比较陡。scala相对java比较灵活,往往有很多方法来解决一个问题。另外scala 与java可以混合编写程序,融合发挥各自的优势。我希望通过一个大数据Scala系列,由浅入深,来一起来快速学习Scala,当然学习scala前题是必须有core java基础。
大数据最直接使用scala原因:
开发大数据应用程序 (Spark程序、Flink程序 )
Hadoop已经是我们大数据领域的事实标准了。Spark生态并不是要取代Hadoop生态,而是为了更好的拓展大数据生态,两者结合。而Spark由Scala开发的,我们学习Scala为了更好的去学习Spark。
表达能力强,scala一行代码抵得上Java多行,开发速度快。优雅,代码简介逻辑更加清晰。
scala站在java肩上兼容Java,可以访问庞大的Java类库,例如:操作mysql、redis、freemarker、activemq等等
案例对比:
假设定义三个实体类(用户、订单、商品)
java代码实现:
用户实体类:
/**
* 用户实体类
*/
public class User {
private String name;
private List<Order> orders;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Order> getOrders() {
return orders;
}
public void setOrders(List<Order> orders) {
this.orders = orders;
}
}
订单实体类:
/**
* 订单实体类
*/
public class Order {
private int id;
private List<Product> products;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public List<Product> getProducts() {
return products;
}
public void setProducts(List<Product> products) {
this.products = products;
}
}
商品实体类:
/**
* 商品实体类
*/
public class Product {
private int id;
private String category;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getCategory() {
return category;
}
public 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) // 商品实体类
总结
看到这里三行代码是不是已经对scala爱不释手了,scala基础用法待续。。。
推荐阅读
(点击标题可跳转阅读)
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
扫码二维码
获取更多精彩
长按图片关注
点个
在看
你最好看