Spark 中用 Scala 和 java 开发有什么区别?

Posted Scala时代

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spark 中用 Scala 和 java 开发有什么区别?相关的知识,希望对你有一定的参考价值。

这是我在知乎上看到的,觉得很有意义,因此整理出来投稿。

问题的详细描述如下:


由于Spark是由Scala开发的所以大家在开发Spark应用程序的时候多数会选择Scala语言,不过Spark官方网站中也给出了用java实现的实例,那么对于会java的人是不是不一定非要学习Scala呢?还是说Scala相比于java有什么优势?


针对这个问题,回复很多。挑选得赞最多的几个展示出来:

1

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 开发有什么区别?

Spark 中用 Scala 和 java 开发有啥区别

如何在idea中用maven配置spark和scala

在spark-shell和Scala jars中用Kryo注册复杂的scala类。

Spark平台下,scala比java更有优势么

scala python哪个用来开发spark更好