转换
以下表格列出了一些常用的Spark支持的转换操作。详细信息,请参考RDD API文档(Scala, Java, Python, R)和 pair RDD 函数文档 (Scala, Java) .
转换 | 含义 |
---|---|
map(func) |
返回一个分布式的数据集,它是通过函数func传递的源,由源的每一个元素而形成 |
filter(func) |
返回一个新的数据集,它是选择源在函数func返回true的那些元素而形成 |
flatMap(func) |
与map类似,但每个输入项能够被映射成0或多个输出项(因此,func应该返回一个序列,而不是单个项) |
mapPartitions(func) |
与map类似,但是分别运行在RDD的每个分区(块),因此,当你运行在一个T类型的RDD上时,func必須是Iterator<T> => Iterator<U> 类型 |
mapPartitionsWithIndex(func) |
与mapPartitions类似,但对函数func提供了一个整型值,这个整型表示分区的索引,因此,当你运行在一个T类型的RDD上时,func必須是(Int, Iterator<T>) => Iterator<U> 类型 |
sample(withReplacement, fraction, seed) |
返回当前RDD的一个样本子集 |
union(otherDataset) |
返回一个新的数据集,里面包含源数据集和参数的并集。 |
intersection(otherDataset) |
返回一个新的数据集,里面包含源数据集和参数的交集。 |
distinct([numTasks])) |
返回一个新的数据集,里面包含源数据集中的不同元素。 |
groupByKey([numTasks]) |
当调用(K,V) 鍵值对的数据集,返回一个(K,Iterable<V>) 鍵值对数据集。注意:如果你是为了执行一个聚合操作(例如sum或average)而分组,使用reduceByKey或aggregateByKey将会效率更高。注意:默认情况下,输出的并行程度依赖于父RDD的分区数量。你可以传递一个可选参数numTasks来设置一个不同的任务数量。 |
reduceByKey(func, [numTasks]) |
当调用(K,V) 鍵值对的数据集,返回一个(K,V) 鍵值对数据集。其中,通过给出的reduce函数func,每个key的对应的value都被聚合,func函数必须是(V,V) => V 类型。与groupByKey类似,reduce任务的数量是通过可选的第二个参数进行配置。 |
aggregateByKey(zeroValue)(seqOp, combOp, [numTasks]) |
当调用(K,V) 鍵值对的数据集,返回一个(K,V) 鍵值对数据集。其中,通过给出的combine函数和一个中立的0值,每个key的对应的value都被聚合。当为了避免不需要的分配,允许一个聚合的value类型与输入的value类型不同。与groupByKey类似,reduce任务的数量是通过可选的第二个参数进行配置。 |
sortByKey([ascending], [numTasks]) |
当调用一个K实现了排序的(K,V) 鍵值对数据集,返回一个以key升序或降序的(K,V) 鍵值对数据集,由参数ascending指定是升序还是降序。 |
join(otherDataset, [numTasks]) |
当调用类型为(K,V) 和(K,W) 类型的数据集时,返回一个对于每个key,所有元素的类型为(K,(V,W)) 鍵值对的数据集。Outer joins是通过leftOuterJoin, rightOuterJoin, 和fullOuterJoin被支持的。 |
cogroup(otherDataset, [numTasks]) |
当调用为(K,V) 和(K,W) 类型的数据集时,返回(K, (Iterable<V>, Iterable<W>)) 元组数据集。这个操作也称为groupWith。 |
cartesian(otherDataset) |
当调用类型T和U的数据集时,返回一个(T,U)鍵值对(所有的元素对)数据集。 |
pipe(command, [envVars]) |
通过一个shell命令,例如Per或bash脚本,来pipe RDD的每个分区。RDD的元素是被写到这个过程的标准输入,并且结果输出到它的标准输出,且作为一个字符串RDD返回。 |
coalesce(numPartitions) |
将RDD的分区数量减小到numPartitions。用于在过滤(filter)一个大型数据集之后,更加有效地运行操作。 |
repartition(numPartitions) |
重新随机地混洗(reshuffle)RDD中的数据,来创建更多或更少的分区,来达到平衡的效果。这常用于整个网络上的所有数据混洗(shuffle)。 |
repartitionAndSortWithinPartitions(partitioner) |
通过给出的partitioner,重新分区RDD,并且,对每个生成的新分区,通过他们的key进行排序。这是非常有效的,相比調用repartition,然后对每个分区排序,因为它能把排序推进混洗机制(shuffle machinery)。 |