您的位置:首页 > 大数据

大数据之Spark探秘:二、RDD的Transformations操作

2015-08-03 15:26 302 查看

一、简介

  Spark中的核心数据模型是弹性分布式数据集(RDD),而弹性分布式数据集(RDD)是个抽象类,具体的实现是由各个子类实现的。Spark将常用的大数据操作都转换为对RDD的子类操作。

  Transformation操作的对象有两种:Value数据类型,Key-Value数据类型。下面将这两种数据类型的操作列出来:

二、Translation操作

2.1 Value数据类型

map(func)

  将原来RDD中的每个元素通过自定义函数func转换为一个包含新元素的RDD。

filter(func)

  对原有RDD中的元素进行过滤,每个元素输入到func函数中,如果func函数返回为true则保留,返回false则丢弃。

flatMap(func)

  功能与map相似,但是输出的是一个集合。

mapPatitions(func)

  功能与map相似,但是mapPatitions获取的是每个分区的迭代器。

mapPationsWithIndex(func)

  功能与mapPatitions相似,但是func函数要返回一个表示分区index的interger类型的值

sanple(withReplacement, fraction, seed)

  对数据集中的数据进行采样,想成一个新的RDD

union(otherDateset)

  将两个数据类型相同的RDD合并成一个RDD

intersection(oterDataset)

  返回一个包含两个数据类型相同的RDD的交集的全新的RDD

distinct([numTasks])

  对RDD中的元素进行去重操作

cartesian(otherDataset)

  对两个RDD内的所有元素进行笛卡尔积操作。

pip(command, [envVars])

  对RDD的每个分区通过脚本命令,RDD元素可以写入进程的stdin和行输出到标准输出作为字符串返回。

coalesce(numPartitions)

  设置RDD数据的分区数,可以让数据集的操作更加高校。

repartition(numPartitions)

  修改RDD数据的分区数

repartionAndSortWithinPartitions(pationer)

  重新设置RDD分区,根据keys值排序,这个比repartition更加高效。

2.2 Key-value类型

groupByKey([numTasks])

  返回一个(k, iterable)键值对

  注意:如果你分组是为了执行一个聚合(比如求和或平均),使用reduceByKey或aggregateByKey将有更好的性能。

  注意:默认情况下,并行输出的分区数取决于父抽样的分区的数量。您可以通过一个可选的numTasks参数设置不同数量的任务。

  

reduceByKey(func, [numTasks])

  对k相同的键值对中的值调用func函数,合并产生一个值

  

aggregateByKey(zeroValue)(seqOp, combOp, [numTasks])

  当对(K、V)的数据集对调用函数时,返回一个数据集的(K,U)对每个键值聚合使用给定的组合功能和一个中立的“0”值。允许产生的聚合值类型不同于输入值类型,同时避免不必要的配置。而在groupByKey中,需要配置第二个参数。

  

sortedByKey([ascending], [numTasks])

  返回一个按照k值进行排序的键值对RDD。

cogroup(oterDataset, [numTasks])

  对两个RDD进行协同划分,每个RDD中形同Key的元素分别聚合为一个集合,并且返回两个RDD中对应key中的元素集合的迭代器。

join(otherDataset, [numTasks])

  对俩个需要连接的RDD进行cogroup函数操作,cogroup原理如上,cogroup操作后形成的新的RDD,对每个Key下的元素进行笛卡尔积操作,返回结果在展平。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: