转换

以下表格列出了一些常用的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)。

results matching ""

    No results matching ""