我很高兴回答你的问题:
由于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源代码,可以事半功倍。
7.此外,Spark基本采用函数式编程。如果使用Java,可能需要写很多匿名类,而Scala只需要一个lambda表达式。
8.Java不支持自动类型派生。RDD类基本都是泛型,声明时需要写一串类类型,而Scala基本可以省略变量类型。
总而言之:
就个人体验而言,Scala相对于Java的优势是巨大的。熟悉Scala后再看看Java代码,感觉像在读汇编...
另外,如果你愿意,可以把Java和Scala混合使用,因为两者最后都编译成类文件,使用Scala可以随意调用Java实现的类和方法。
从表面上看,无论使用哪种语言,都可以完成同样的功能,只是代码量有多有少。开发者可以根据自己的情况选择使用Java或者Scala。
据说最新的Java 8已经支持函数接口,Java 9也会引入Java Shell函数,会逐渐变得像Scala一样简洁。