spark的transformation与action

来源:互联网 发布:大数据应用的典型案例 编辑:程序博客网 时间:2024/04/27 23:04


下表列出了Spark支持的一些常见转换。
有关详细信息,请参阅RDD API文档(
Scala, Java, Python, R)和RDD函数doc(Scala, Java)。

转型含义mapfunc通过函数func传递源的每个元素形成的新的分布式数据集filterfunc返回通过选择func返回true 的源的元素形成的新数据集flatMapfunc类似于地图,但是每个输入项可以映射到0个或更多的输出项(所以func应该返回一个Seq而不是一个项)。mapPartitionsfunc与地图类似,但是在RDD的每个分区(块)上单独运行,所以当在类型T的RDD上运行时func必须是Iterator类型的迭代器<>类型。mapPartitionsWithIndexfunc类似于mapPartitions,而且还提供FUNC与表示所述分区的索引的整数值,所以FUNC必须是类型(中间体,迭代器<T>)=>的迭代器上类型T的RDD运行时<U>sample(withReplacementfractionseed)试分数分数的数据的,具有或不具有替换,使用给定的随机数发生器的种子。unionotherDataset返回一个包含源数据集和参数中的元素的并集的新数据集。intersectionotherDataset返回包含源数据集和参数中的元素的新RDD。distinct([ numTasks ]))返回一个包含源数据集的不同元素的新数据集。groupByKey([ numTasks ])当对(K,V)对的数据集进行调用时,返回(K,Iterable <V>)对的数据集。
注意:如果您正在进行分组,以便在每个键上执行聚合(如总和或平均值),则使用reduceByKeyaggregateByKey将产生更好的性能。 
注意:默认情况下,输出中的并行级别取决于父RDD的分区数。您可以传递一个可选numTasks参数来设置不同数量的任务。
reduceByKeyfunc,[ numTasks ])当对(K,V)对的数据集进行调用时,返回(K,V)对的数据集,其中每个键的值使用给定的减函数函数进行聚合,该函数必须是类型(V,V)=> V.像在groupByKey,减少任务的数量可以通过可选的第二个参数进行配置。aggregateByKeyzeroValue)(seqOpcombOp,[ numTasks ])当(K,V)对的数据集被调用时,返回(K,U)对的数据集,其中使用给定的组合函数和中性“零”值对每个键的值进行聚合。允许与输入值类型不同的聚合值类型,同时避免不必要的分配。像在中groupByKey,减少任务的数量可以通过可选的第二个参数进行配置。sortByKey([ ascending ],[ numTasks ])在K实现有序的(K,V)对的数据集上被调用时,返回按照布尔ascending参数中指定的按键按升序或降序排序的(K,V)对的数据集joinotherDataset,[ numTasks ])当对类型(K,V)和(K,W)的数据集进行调用时,返回一个数据集(K,(V,W))对与每个键的所有元素对。外连接通过支持leftOuterJoinrightOuterJoinfullOuterJoincogroupotherDataset,[ numTasks ])当调用类型(K,V)和(K,W)的数据集时,返回一个数据集(K,(Iterable <V>,Iterable W)))元组。此操作也被调用groupWithcartesianotherDataset当对类型T和U的数据集进行调用时,返回(T,U)对(所有元素对)的数据集。pipecommand[envVars]通过shell命令管理RDD的每个分区,例如Perl或bash脚本。RDD元素被写入进程的stdin,并且将其stdout的行输出作为字符串的RDD返回。coalescenumPartitions将RDD中的分区数减少到numPartition。用于过滤大型数据集后更有效地运行操作。repartitionnumPartitions随机重新清理RDD中的数据以创建更多或更少的分区,并在其间平衡。这总是通过网络洗牌所有的数据。repartitionAndSortWithinPartitionspartitioner根据给定的分区器重新分配RDD,并在每个生成的分区内按其键分类记录。这比调用更有效repartition,然后在每个分区内排序,因为它可以将排序推入洗牌机器。

操作

下表列出了Spark支持的一些常见操作。参考RDD API文档(Scala, Java, Python, R和RDD函数doc(Scala, Java)的详细信息。

行动含义reducefunc使用函数func(它需要两个参数并返回一个)来聚合数据集的元素该函数应该是交换和关联的,以便它可以并行计算。collect()在驱动程序中将数据集的所有元素作为数组返回。这通常在返回足够小的数据子集的过滤器或其他操作后很有用。count()返回数据集中的元素数。first()返回数据集的第一个元素(类似于(1))。taken使用数据集的前n个元素返回数组takeSamplewithReplacementnum,[ seed ])返回一个具有数据集num元素的随机抽样的数组,带或不带替换,可选地预先指定随机数生成器种子。takeOrderednordered ]使用自然顺序或自定义比较器返回RDD 的前n个元素。saveAsTextFilepath在本地文件系统,HDFS或任何其他Hadoop支持的文件系统的给定目录中,将数据集的元素作为文本文件(或一组文本文件)编写。Spark将在每个元素上调用toString将其转换为文件中的一行文本。saveAsSequenceFilepath
(Java和Scala)
在本地文件系统,HDFS或任何其他Hadoop支持的文件系统的给定路径中,将数据集的元素作为Hadoop SequenceFile写入。这可以在实现Hadoop可写接口的键值对的RDD上使用。在Scala中,它也可以隐式转换为可写的类型(Spark包括基本类型的转换,如Int,Double,String等)。saveAsObjectFilepath
(Java和Scala)
使用Java序列化以简单的格式写入数据集的元素,然后可以使用它进行加载SparkContext.objectFile()countByKey()仅适用于类型(K,V)的RDD。返回与每个键的计数的(K,Int)对的hashmap。foreachfunc在数据集的每个元素上运行函数func这通常用于副作用,例如更新累加器或与外部存储系统交互。 
注意:修改外部的累加器之外的变量foreach()可能会导致未定义的行为。有关详细信息,请参阅了解闭包
原创粉丝点击