Actions
命令 | 说明 |
---|---|
reduce(func) |
通过函数func 聚集数据集中的所有元素。func 函数接受2个参数,返回一个值。这个函数必须是关联性的,确保可以被正确的并发执行 |
collect() |
在Driver 的程序中,以数组的形式,返回数据集的所有元素。这通常会在使用filter 或者其它操作后,返回一个足够小的数据子集再使用,直接将整个RDD 集Collect返回,很可能会让Driver 程序OOM |
count() |
统计RDD 中元素的个数 |
take(n) |
取RDD 中的前n 个元素。注意,这个操作目前并非在多个节点上,并行执行,而是Driver 程序所在机器,单机计算所有的元素(Gateway的内存压力会增大,需要谨慎使用) |
first() |
返回数据集的第一个元素(类似于take(1) ) |
reduce(func) |
按照指定规则聚合RDD 中的元素 |
countByValue() |
统计出RDD 中每个元素的个数 |
countByKey() |
统计出KV 格式的RDD 中相同的K的个数 |
foreach(func) |
以元素为单位,遍历RDD ,运行func 函数。 |
foreachPartition(func) |
以分区为单位,遍历RDD ,运行func 函数。 |
saveAsTextFile(path) |
将数据集的元素,以textfile 的形式,保存到本地文件系统,hdfs 或者任何其它hadoop 支持的文件系统。Spark将会调用每个元素的toString 方法,并将它转换为文件中的一行文本 |
saveAsSequenceFile(path) |
将数据集的元素,以sequencefile 的格式,保存到指定的目录下,本地系统,hdfs 或者任何其它hadoop 支持的文件系统。RDD 的元素必须由key-value 对组成,并都实现了Hadoop 的Writable 接口,或隐式可以转换为Writable (Spark包括了基本类型的转换,例如Int ,Double ,String 等等) |
1 | //collect 把运行结果拉回到Driver端 |
Transformations
命令 | 说明 |
---|---|
filter(func) |
返回一个新的数据集,由经过func 函数后返回值为true 的原元素组成 |
map(func) |
返回一个新的分布式数据集,由每个原元素经过func 函数转换后组成 |
flatMap(func) |
类似于map ,但是每一个输入元素,会被映射为0到多个输出元素(因此,func 函数的返回值是一个Seq ,而不是单一元素) |
sample(withReplacement, frac, seed) |
随机抽样withReplacement :是否是放回式抽样frac ::抽样的比例seed :随机种子 |
reduceByKey(func, [numTasks]) |
在一个(K,V) 对的数据集上使用,返回一个(K,V) 对的数据集,key 相同的值,都被使用指定的reduce 函数聚合到一起。和groupbykey 类似,任务的个数是可以通过第二个可选参数来配置的。 |
groupByKey([numTasks]) |
在一个由(K,V) 对组成的数据集上调用,返回一个(K,Seq[V]) 对的数据集。注意:默认情况下,使用8个并行任务进行分组,你可以传入numTask 可选参数,根据数据量设置不同数目的Task |
sortByKey(func, [numTasks]) |
按key 值进行排序 |
union(otherDataset) |
返回一个新的数据集,由原数据集和参数联合而成 |
join(otherDataset, [numTasks]) |
在类型为(K,V) 和(K,W) 类型的数据集上调用,返回一个(K,(V,W)) 对,每个key中的所有元素都在一起的数据集 |
cartesian(otherDataset) |
笛卡尔积。但在数据集T和U上调用时,返回一个(T,U) 对的数据集,所有元素交互进行笛卡尔积。 |
map(func) |
以元素为单位,遍历RDD ,运行func 函数。 |
mapPartitions(func) |
以分区为单位,遍历RDD ,运行func 函数。 |
mapPartitionsWithIndex |
与mapPartitions 基本相同,只是在处理函数的参数是一个二元元组,元组的第一个元素是当前处理的分区的index ,元组的第二个元素是当前处理的分区元素组成的Iterator |
coalesce(n,shuffle) |
改变RDD的分区数 n:新的分区数目 shuffle:false:不产生shuffle;true:产生shuffle,如果重分区的数量大于原来的分区数量,必须设置为true,否则分区数不变 |
repartition(n) |
改变RDD分区数。repartition(int n) = coalesce(int n, true) |
partitionBy |
通过自定义分区器改变RDD分区数 |
randomSplit(Array) |
根据传入的 Array 中每个元素的权重将rdd 拆分成Array.size 个RDD 拆分后的RDD 中元素数量由权重来决定, |
groupWith(otherDataset, [numTasks]) |
在类型为(K,V)和(K,W)类型的数据集上调用,返回一个数据集,组成元素为(K, Seq[V], Seq[W]) Tuples。这个操作在其它框架,称为CoGroup |
map和flatMap
filter、sample、sortByKey、sortBy
1 | //filter:过滤 |
groupByKey和reduceByKey
distinct:去掉重复数据
1 | val rdd = sc.makeRDD(Array( |
map和mapPartitions
1 | val arr = Array("Tom","Bob","Tony","Jerry") |
1 | /* |
mapPartitionsWithIndex
1 | val dataArr = Array("Tom01","Tom02","Tom03" |
coalesce:改变RDD的分区数
1 | /* |
randomSplit:拆分RDD
1 | /** |