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

小编 1482

Spark中用Scala和java开发有代码量上的区别。Scala是函数式语言,与Spark处理思想更相近,相对Java语法更丰富,也更简单;而Java语法虽然更为规范,但比较臃肿,用java代码100行写出来的spark程序,可能用scala几行就能搞定。

1.Spark用Scala和java开发的区别

Scala是一门函数式语言,Java是面向对象语言,二者在语言特点上差异特别大。Scala相对Java语法更丰富,更简洁,写起来更像脚本,能够提高开发效率。而使用Java的话代码会规范些,不过太臃肿,代码量更大。

Spark作为一个数据统计分析的工具,它是偏向于函数式处理的思想,因此在spark应用开发时,天然与scala亲近,所以用scala写spark十分的简洁明了,用java代码100行写出来的spark程序,可能用scala几行就搞定了。

另外,Spark基本使用函数式编程,使用Java的话可能需要写一大堆匿名类,而Scala只需要一个lambda表达式。Java不支持自动类型推导,RDD类基本都是范型,声明时需要写一串类类型,而Scala基本可以省略变量类型。

2.Scala与java之间的关联性

Scala语言是马丁奥德斯基接触Java语言后,针对Java语言的特点,将函数式编程语言的特点融合到Java中,由此发明的。进一步来讲,Scala是一门以Java虚拟机(JVM)为运行环境,并将面向对象和函数式编程的优异特性结合在一起的静态类型编程语言。

Scala语言编译的范围要大于Java语言的编译范围,也就是说有的Java程序可以通过Scalac编译形成字节码,然后通过Scala运行器运行想要的class文件,因为Scala语言包含了部分Java语法。但是Java编译器是无法,编译Scala程序然后用Java运行器执行的,因为Scala拥有自己一些特有的语法,这是Java编译器和运行器所顾及不到的。

当然,对于java开发人员而言,采用java语言开发Spark才是优异选择。目前最新的Java8已经支持函数式接口了,Java 9也将推出Java Shell功能,慢慢地会变得和Scala一样简洁。另外,也可以混合Java和Scala进行开发,因为二者最终都是编译成class文件,使用Scala能够随意调用Java实现的类和方法。

延伸阅读

Spark有哪些优点

spark是一个用来实现快速,通用的集群计算平台。它适用于各种各样原先需要多种不同的分布式平台的场景,包括批处理、迭代算法、交互式查询、流处理。通过在一个统一的框架下支持这些不同的计算,spark使我们可以简单而低耗地把各种处理流程整合在一起。整体而言,Spark有以下优点:

1.轻量级快速处理

与Hadoop的MapReduce相比,Spark基于内存的运算是MapReduce的100倍,基于硬盘的运算也要快10倍以上。Spark实现了高效的DAG执行引擎,可以通过基于内存来高效处理数据流。

2.易于使用

Spark支持Scala、Java、Python、R和SQL脚本,并提供了超过80种高性能的算法,非常容易创建并行App。而且Spark支持交互式的Python和Scala的shell,这意味着可以非常方便地在这些shell中使用Spark集群来验证解决问题的方法,而不是像以前一样需要打包、上传集群、验证等,这对于原型开发非常重要。

3.通用性强

Spark提供了统一的解决方案,可以用于批处理、交互式查询(通用Spark SQL)、实时流处理(通过Spark Streaming)、机器学习(通过Spark MLlib)和图计算(通过Spark GraphX)。这些不同类型的处理都可以在同一应用中无缝使用。

4.可融合性强

Spark非常方便的与其他开源产品进行融合。比如,Spark可以使用Hadoop的YARN和Apache Mesos作为它的资源管理和调度器,并且可以处理所有Hadoop支持的数据,包括HDFS、HBase和Cassanda等。

Spark也可以不依赖第三方的资源管理器和调度器,它实现了Standalone作为其内置资源管理器和调度框架,这样进一步降低了Spark的使用门槛,使得所有人可以非常容易地部署和使用Spark。此外Spark还提供了在EC2上部署Standalone的Spark集群的工具。

5.实时的流处理

对比MapReduce只能处理离线数据,Spark还能支持实时流计算。Spark Streaming主要用来对数据进行实时处理,当然在YARN之后Hadoop也可以借助其他的工具进行流式计算。

回复

我来回复
  • 暂无回复内容

注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部