为什么Spark要用Scala实现

一、为什么Spark要用Scala实现

1、spark和scala真的是非常完美的配搭,RDD的很多思想与scala类似,如完全相同概念List的map、filter等高阶算子,很短的

代码就可以实现java很多行的功能;类似于fp中的不可变及惰性计算,使得分布式的内存对象rdd可以实现,同时可以实现pipeline;

2、scala善于借力,如设计初衷就包含对于jvm的支持,所以可以很完美的借java的生态力量;spark一样,很多东西不要自己写,直接使用、借鉴,如直接部署在yarn、mesos、ec2,使用hdfs、s3,借用hive中的sql解析部分;

3、还有akka方便开发高效的网络通讯。

二、Spark中parallelize函数和makeRDD函数的区别

Spark主要提供了两种函数:parallelize和makeRDD:1)parallelize的声明:defparallelize[T:ClassTag](seq:Seq[T],numSlices:Int=defaultParallelism):RDD[T]2)makeRDD的声明:defmakeRDD[T:ClassTag](seq:Seq[T],numSlices:Int=defaultParallelism):RDD[T]defmakeRDD[T:ClassTag](seq:Seq[(T,Seq[String])]):RDD[T]3)区别:A)makeRDD函数比parallelize函数多提供了数据的位置信息。

三、雪佛兰乐驰明明是美国车,咋变成韩国车了?

雪弗兰属于美国通用公司,通用收购了韩国大宇汽车,并通过进行全球技术整合设计生产大宇的车型,乐驰是用当时在大宇的一款车型为平台进行改进设计,虽然配件和后期设计都是由欧州人负责,但由于车体本身是来源于通用大宇,所以很多喜欢转牛角尖的人就咬定这款车是韩国车,其实只是没有什么意义的争论罢了,就算当它是韩过车,也是装配欧宝引擎的韩国车。

四、Spark RDD到底是个什么东西

Spark RDD的英文是Resilient Distributed Datasets,即弹性分布式数据集。通俗一点讲,Spark是做大数据处理的,RDD是其中极为重要的数据抽象,海量数据会被拆分为多个分片放在不同的集群节点上,RDD就是这些分布式数据的集合。在Spark Scala中, RDD就是一个类,每个RDD的实例表示一个具体的分布式数据集合。详见:

五、如何理解spark中RDD和DataFrame的结构

RDD、DataFrame和DataSet是容易产生混淆的概念,必须对其相互之间对比,才可以知道其中异同。

RDD和DataFrame

RDD-DataFrame

上图直观地体现了DataFrame和RDD的区别。左侧的RDD[Person]虽然以Person为类型参数,但Spark框架本身不了解

Person类的内部结构。而右侧的DataFrame却提供了详细的结构信息,使得Spark

SQL可以清楚地知道该数据集中包含哪些列,每列的名称和类型各是什么。DataFrame多了数据的结构信息,即schema。RDD是分布式的

Java对象的集合。DataFrame是分布式的Row对象的集合。DataFrame除了提供了比RDD更丰富的算子以外,更重要的特点是提升执行效

率、减少数据读取以及执行计划的优化,比如filter下推、裁剪等。