Spark 中用 Scala 和 java 开发有什么区别?
Posted Scala时代
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spark 中用 Scala 和 java 开发有什么区别?相关的知识,希望对你有一定的参考价值。
这是我在知乎上看到的,觉得很有意义,因此整理出来投稿。
问题的详细描述如下:
由于Spark是由Scala开发的所以大家在开发Spark应用程序的时候多数会选择Scala语言,不过Spark官方网站中也给出了用java实现的实例,那么对于会java的人是不是不一定非要学习Scala呢?还是说Scala相比于java有什么优势?
针对这个问题,回复很多。挑选得赞最多的几个展示出来:
1,构建系统的选择,sbt更合适用来构建Scala工程,maven更合适用来构建Java工程
2,对于spark中的API来说,Java和Scala有差别,但差别并不大
3,如果用Scala开发spark原型程序,可以用spark-shell“打草稿”,或者直接使用spark-shell做交互式实时查询
4,用Scala代码量将减少甚至一个数量级,不过Scala的使用门槛较高
建议:使用Scala构建spark作业,因为spark本身为sbt所构建,同时使用Scala开发spark作业将有助于理解spark的实现机制
2
Scala相对Java语法更丰富,更简洁,写起来更像脚本,能够提高开发效率。
使用Java的话代码会规范些,不过太臃肿,代码量更大。
另外Spark基本使用函数式编程,使用Java的话可能需要写一大堆匿名类,而Scala只需要一个lambda表达式。
Java不支持自动类型推导,RDD类基本都是范型,声明时需要写一串类类型,而Scala基本可以省略变量类型。
另外,如果喜欢,可以混合Java和Scala,因为二者最终都是编译成class文件,使用Scala能够随意调用Java实现的类和方法。
从表面上看,无论采用哪种语言,都能完成一样的功能,只是代码量有多有少,开发人员根据自己的情况选择使用Java还是Scala都可。
据说目前最新的Java 8已经支持函数式接口了,Java 9也将推出Java Shell功能,慢慢地会变得和Scala一样简洁。
3
scala相对java语法更丰富,更简洁,写起来更像玩脚本,能够提高开发效率!使用java的话代码会规范些,不过太臃肿,代码量更大。另外spark基本使用函数式编程,使用java的话可能需要写一大堆匿名类,而scala只需要一个lambda表达式。另外java不支持自动类型推导,RDD类基本都是范型,声明时需要写一串类类型,而scala基本可以省略变量类型!另外,如果喜欢,可以混合java和scala,因为二者最终都是编译成class文件,使用scala能够随意调用java实现的类和方法!目前最新的java 8已经支持函数式接口了,java 9也将推出java shell功能,慢慢地会弥补以上的不足!现在还是建议直接使用scala,对于有java基础的还是挺快上手的,不过刚开始时会特别不习惯scala的语法,比如数组索引使用小括号,范型参数使用中括号以及类型命在变量后面等!
4
就个人体会来说,Scala相对于Java的优势是巨大的。熟悉Scala之后再看Java代码,有种读汇编的感觉……
如果仅仅是写Spark应用,并非一定要学Scala,可以直接用Spark的Java API或Python API。但因为语言上的差异,用Java开发Spark应用要罗嗦许多。好在带lambda的Java 8出来之后有所改善。
在Spark应用开发上,学Scala主要好处有二:
开发效率更高,代码更精简;
使用Spark过程中出现异常情况,在排查时如果对Spark源码比较熟悉,可以事半功倍。
5
scala学学学,java代码说实话我从一开始就很抵触,一写就是一大堆,老太婆裹脚布一样,一堆没有意义的格式化的东西。scala优雅太多了,而且还能当脚本语言来跑,某些程度上连python都不用学了。但是scala最大的问题是api的符号标记太复杂,很多都好难看懂,某些语法太过复杂,上手还是有些难度的。
以上是关于Spark 中用 Scala 和 java 开发有什么区别?的主要内容,如果未能解决你的问题,请参考以下文章
Spark 中用 Scala 和 java 开发有什么区别?