Spark中的核心数据模型是弹性分布式数据集(RDD),而弹性分布式数据集(RDD)是个抽象类,具体的实现是由各个子类实现的。Spark将常用的大数据操作都转换为对RDD的子类操作。
Transformation操作的对象有两种:Value数据类型,Key-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更加高效。
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下的元素进行笛卡尔积操作,返回结果在展平。