很高兴回答你的问题:
由于Spark是由Scala开发的所以大家在开发Spark应用程序的时候多数会选择Scala语言,不过Spark官方网站中也给出了用java实现的实例。
1、构建系统的选择,sbt更合适用来构建Scala工程,maven更合适用来构建Java工程。
2、对于spark中的API来说,Java和Scala有差别,但差别并不大。
3、如果用Scala开发spark原型程序,可以用spark-shell“打草稿”,或者直接使用spark-shell做交互式实时查询。
4、用Scala代码量将减少甚至一个数量级,不过Scala的使用门槛较高
5、Scala 开发效率更高,代码更精简。
6、使用Spark过程中出现异常情况,在排查时如果对Spark源码比较熟悉,可以事半功倍。
7、另外Spark基本使用函数式编程,使用Java的话可能需要写一大堆匿名类,而Scala只需要一个lambda表达式。
8、Java不支持自动类型推导,RDD类基本都是范型,声明时需要写一串类类型,而Scala基本可以省略变量类型。
综上所述:
就个人体会来说,Scala相对于Java的优势是巨大的。熟悉Scala之后再看Java代码,有种读汇编的感觉……
另外,如果喜欢,可以混合Java和Scala,因为二者最终都是编译成class文件,使用Scala能够随意调用Java实现的类和方法。
从表面上看,无论采用哪种语言,都能完成一样的功能,只是代码量有多有少,开发人员根据自己的情况选择使用Java还是Scala都可。
据说目前最新的Java 8已经支持函数式接口了,Java 9也将推出Java Shell功能,慢慢地会变得和Scala一样简洁。