spark入门
---恢复内容开始---
三、Spark RDDS
可以把RDDs看做特殊得待处理数据集,可以并行被处理,操作这个数据集的包括两个方法,一个是转换(transformations)不计算结果,一个是active(动作),计算出结果
1、弹性分布式数据集(RDDs)
spark核心的概念是RDD:一个可并行操作的有容错机制的数据集合。两种创建RDD的方法,一个是从别的RDDs转化过来,一个是从外部存储系统的数据集,如HDFS、Hbase等
2、并行集合
顾名思义:并行集合(parallelized collections)的创建是通过对已有的集合(scala seq)上调用spark context的parallelized方法实现,方法操作后就把数据复制到一个可并行操作的分布式数据集中,
一旦创建完成,这个分布式数据集即可以被并行操作,如distData.reduce((a,b) => a+b) 将这个数组中的元素相加,
并行集合方法有个很重要的参数是切片数,表示一个数据集切分的分数,spark会在集群上为每一个切片运行一个任务,你可以在集群上为每个cpu设置2-4个切片;正常情况下,spark会试着基于你的集群状况自动第
设置切片数目
3、外部数据转为RDDs
spark可以从任何一个hadoop支持的存储源创建分布式数据集,包括本地文件系统
文本文件RDDs可以使用SparkContext的textFile方法创建,参数是URl,一旦创建完成,可以对数据集进行map、reduce操作
distData.map(s => s.length).reduce((a,b) => a+b) 将所有行的长度相加
4、spark RDD 操作
第一行定义来自于外部文件的RDD,这个数据集并没有加载到内存或者其他的操作;lines仅仅是一个指向文件的指针,第二行是定义linesLengths,它是map转换的结果,同样linesLengths由于懒惰模式也没有
立即计算,最后,我们执行reduce,他是一个动作(active),在这个地方,spark把计算分成多个任务(task),并且让他们运行在多个机器上,每台机器都运行自己的map部分和本地reduce部分,
然后,仅仅将结果返回给驱动程序,如果我们想要再次使用linenlengths,可以添加linelengths.persist(),在reduce之前,它会导致lineLengths在第一次计算完成之后保存到内存中。
5、RDD持久化 cache缓存
将数据集缓存到内存,每一个节点都将参与计算的所有分区数据存储到内存中,并且这些数据可以被这个集合的动作active重复利用。
四、Spark Streaming:处理流数据、Dstream、由一系列RDDs组成
Spark streaming 是spark核心API的一个扩展,它对实时流试数据的处理具有可扩展性、高吞吐量,可容错性等特点,我们可以从kafka、flume、titter等源获取数据,也可以通过由高阶函数map、reduce
join等组成的复杂计算出数据,最后处理后的数据可以推送到文件系统、数据库,或者数据应用到Spark的机器学习算法、图处理算法中去
Spark streaming接受实时的输入数据流,然后将这些数据切分为批数据供Spark处理,
spark streaming支持一个高层的抽象(类似于类),叫做离散流,或者Dstream,Dstream既可以从kfkaf、flume获取的数据流创建,也可以在其他的Dstream的基础上通过高阶函数获得,
在内部、Dstream是由一系列的RDDs组成。
五、Spark SQL
允许用SQL、HIveQL或者Scala表示的关系查询,这个模块的核心是一个新类型的RDD-SchemaRDD。SchemaRDDs由行对象组成,行对象拥有一个模式(scheme)来描述行中每一列的数据类型。
SchemaRDD类似于关系型数据库中的表,类似于pandas中的Dataframe。
可以通过存在的RDD、一个Parquet文件、一个JSON数据库或者对存储在APache Hive中的数据执行HiveSQL查询中创建
六、GraphX
GraphX,它用于图和并行图(graph-parallel)的计算。是扩展spark rdd的,引入了带有定点和边属性的有向重图。为了支持图计算,GraphX公开一组基本的功能操作以及Pregel API的一个优化,另外
GraphX包含一个日益增长的图算法和图Builders的集合,用以简化图分析任务。
GraphX允许用户将数据当做一个图和一个集合(RDD),而不需要数据移动或者复制。通过将最新的进展整合进graph-parallel
系统,GraphX能够优化图操作的执行
---恢复内容结束---