spark 编程学习

众所周知,spark编程中最重要的的rdd,关于rdd概念和原理参考之前的转载文件:http://blog.csdn.net/baiyangfu_love/article/details/23448127

这里我们主要参考spark的官方api文档进行学习:

RDD   api: http://spark.incubator.apache.org/docs/latest/api/core/index.html#org.apache.spark.rdd.RDD

core api: http://spark.incubator.apache.org/docs/latest/api/core/index.html#org.apache.spark.package


RDD有五个主要的特点:

1、一个划分的列表

2、在每个分区上进行计算的方法

3、依赖于其他RDD

4、另外,会有一个Parititioner将RDD分割成 一些 key-value RDDs(比如说,将一个RDD以hash方式进行分割)

5、另外,往往会将计算单元放到数据所在节点(类似于mapreduce的data aware)


除了 RDD类,还有几个他的子类需要学习:

CoGroupedRDDCoalescedRDD, EmptyRDD, HadoopRDD, JdbcRDD, NewHadoopRDD, PartitionPruningRDD, PipedRDD, SampledRDD, ShuffledRDD, UnionRDD, ZippedPartitionsBaseRDD, ZippedPartitionsRDD2, ZippedPartitionsRDD3, ZippedPartitionsRDD4, ZippedRDD


RDD有两种操作方式: 一种是 transformation :一组数据经过操作(比如 map 、filter等)转换成另外一组数据

                                          一种是actions : 一组数据经过操作 (比如 reduce、count等)转换成一个最终结果

先看一下transformation的操作都有哪些,怎么使用:

map(func): 通过将一个方法应用到RDD的多有元素,返回一个新的RDD 

filter(func):   返回一个新的数据集,这个数据集只包含func返回为true的元素

flatMap(func): 类似于map,但是经过func处理,每一个输入元素可以产生0个或者多个输出元素,而map只能是一对一的

mapPartitions(func)  :类似于map,但是func是运行于RDD的每个分区(块)上的,所以,func必须是Iterator[T] => Iterator[U] 类型的

mapPartitionsWithIndex(func):类似于mapPartitions,但是func的参数必须有一个int型的index,代表partition的索引,所以,func必须是 ( Int, Iterator[U] ) 类型

sample(withReplacement,fraction,seed):对rdd取样一段数据,withReplacement表示有没有替代值,使用seed 产生随机数

union(otherDataset):返回一个新的dataset,包含所有 union 的 dataset 元素

distinct ([ num Tasks ]):返回一个只包含元数据集的非重复的元素集

groupByKey([ num Task ]):当一个PairRDD调用这个方法,返回一个 (K, Seq[ V ])对的数据集。默认情况下会有8个并行的任务进行group运算,你可以设置 numTask   来指定并行任务的个数。

reduceByKey(func, [ num Task ]):同样的,这个也是用在PairRDD (K, V)数据集上,相同的 K 的 V 通过 func 汇集到一起。numTask : reduce task 的个数

sortByKey([ ascending ], [ num Tasks ]):同样的,这个也是用在PairRDD (K, V)数据集上,K 要实现 Ordered 接口,返回一个 (K , V)的数据集,ascending 这个 boolean 类型用来指定是否使用升序或者降序进行排序

join(otherDataset,[ num Tasks ]):当两个数据集: (K , V),(K , W)调用 join 这个方法,返回一个 (K, ( V  , W ))数据集

cogroup(otherDataset,[ num Task ]):当两个数据集: (K , V),(K , W)调用  这个方法,返回一个 (K, Seq[ V ] , Seq[ W ])数据集

catesian(otherDataset):当两个类型为 T 和 U 的两个数据集调用这个方法, 返回(T , U )对的数据集


ACTIONS:

reduce(func):通过func将数据集的元素聚合,这个func应该是可交换的,并且是可联合的,这样才能使得计算过程能够正确的并行化

collect():将数据集中的元素以数组的形式返回吗,通常是经过filter或者其他返回一个子集的操作之后调用这个action

count():返回数据集元素个数

first():返回数据集的第一个元素

take(n):以数组形式返回数据集的前n个元素

takeSample(withReplacement,num,seed):返回任意num个元素的样本,以数组形式

saveAsTextFile(path):将数据集元素以text file形式写入指定的目录,文件系统可以是本地文件系统,HDFS或者其他 Hadoop-supported 文件系统。

saveAsTextFile(path):功能类似于saveAsTextFile,只不过保存的文件形式是二级制的。

countByKey():只有当 RDD 返回一个map (K , Int)对的时候才可以调用这个action

foreach(func):将func作用于每个元素,这个通常用于update或者与外部存储进行打交道的时候调用



未完待续……




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值