首页 > 学院 > 开发设计 > 正文

跟天齐老师学Spark(6)--Spark的常用算子介绍

2019-11-11 05:20:04
字体:
来源:转载
供稿:网友
spark的常用算子介绍:Resilient(弹性且可复原) Distributed(分布式) Datasets(数据集) (RDDs)我们以前学的scala的原生方法都是数组或者集合上定义的,它只能操作单机。而spark中的方法都是定义在RDD上的,它们操作的是集群。spark的方法有两类操作:一种是:Transformations,它是lazy的,不会触发任务的执行,是一种转换(从一种形式变成另一种形式),是延迟加载的;一种是:Actions,执行出结果,是一种动作,是立即加载(执行)的;看一下spark 的常用算子:登录spark的官网http://spark.apache.org/下面是官方的Spark编程指南:http://spark.apache.org/docs/1.6.2/PRogramming-guide.html在指南的列表目录中有 Transformations 和 Actions 。Diver是客户端,它提交程序到spark集群,而计算的返回结果会再发回给Diver客户端。Transformations有很多,比如说map方法,filter方法,mapPartitions方法,sample方法,union方法,intersection方法,distinct方法,groupByKey方法,reduceByKey方法,aggregateByKey方法,sortByKey方法,join方法,Transformations 的特点是,它是lazy的,并不会触发任务的执行。有scala的API:http://spark.apache.org/docs/1.6.2/api/scala/index.html#org.apache.spark.rdd.RDD也有java的API:http://spark.apache.org/docs/1.6.2/api/java/index.html?org/apache/spark/api/java/JavaRDD.htmlActions的方法有:reduce方法,collect方法,count方法,first方法,take方法,takaSample方法,takeOrdered方法,saveAsTextFile方法,countByKey方法,foreach方法。---------------------------------------------------------------------说一下spark的第一类算子:Transformations如果要从hdfs中读取数据,或者从关系型数据库中读数据,如果我们的hdfs或者关系型数据库没有启动,此时使用Transformations类型的算子,就不会报错。因为它只会记录一下它将从哪里读取数据。Transformations仅仅是一种转换操作,而Action则是一些执行操作。spark支持从本地文件系统、hdfs、s3、hbase等读取数据。在Worker中有一个进程叫做"CoarseGrainedExecutorBackend"进程,它负责读取数据、对数据进行切分、聚合等操作,都是在Executor中完成的。在Driver端启动了一个spark-shell,然后在这里写任务,比如写一些转换和Action,在写转换的时候,它会在这个spark-shell中记录我们是怎样转换的,一旦触发Action,Driver端就会把任务提交到我们的Executor上执行,执行返回的结果会收集到Driver端。每个Executor只负责计算其中的属于它的数据。这就是分布式思维,一个大的任务让一台机器去干,它干不了,那么我们就分成很多的小任务,由多台机器去并行执行。最后将所有的结果收集起来,存到外部存储介质中。从外部存储介质中将数据读进来然后创建的RDD,还有一个种创建RDD的方法://使用spark的并行化方法创建RDD,并指定分区数为2个:sc.parallelize(Array(1,2,3,4,5,6,7,8,9),2),也能创建一个RDD,它会将一个集合或者数组转换成RDD,还能指定分区数,这里我们给它指定了分区数为2。这样它就会生成两个结果文件。就像MapReduce中的一样,如果有两个reduce就会有两个结果文件一样。RDD上的这些常用算子一定要练习。------------------------------------------------RDD的Action算子:我们把Spark的客户端叫做Driver。启动Master;启动Worker;Worker向Master注册;Master向Worker反馈;Worker向Master发送心跳。Driver首先会跟Master进行RPC通信(因为我们在shell命令中指定了--master的位置,所以它会去找Master)。向Master申请资源;Master启动符合条件的Worker来启动Executor(Master会告诉Worker启动Executor这个java子进程。Executor进程是由Worker进程启动的。);Executor会主动跟Driver进行通信(因为Driver会把它的一些信息发送给Master,而Master会把Driver的信息封装起来,发送给Worker,而Executor就通过Worker知道了Driver的信息,所以就能找到Driver了),接下来就可以写spark程序了。可以为数据指定分区的。一个分区一定属于一台机器,但是一台机器可能有多个分区。数据的读取和计算都是在Executor中完成的。 rdd的foreachPartition方法可以将数据取出来存到关系型数据库中(后面再介绍)。
上一篇:XMLParser 详解

下一篇:codevs 2664_上厕所

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表