spark中Transformations和Actions(转换和操作)

Transformations – 转换

转型含义
map(func返回一个新的分布式数据集,该数据集是通过将源的每个元素传递给函数func形成的
filter(func返回一个新的数据集,该数据集是通过选择源中func返回true的那些元素形成的。
flatMapfunc与map相似, 而flatMap在map的基础上做了一个合并操作。
mapPartitionsfunc与map相似,但是分别在RDD的每个分区(块)上运行,因此func在类型T的RDD上运行时必须为Iterator <T> => Iterator <U>类型。
mapPartitionsWithIndexfunc与mapPartitions类似,但它还为func提供表示分区索引的整数值,因此当在类型T的RDD上运行时,func必须为(Int,Iterator <T>)=> Iterator <U>类型。
samplewithReplacementfraction ,seed)试分数分数的数据的,具有或不具有替换,使用给定的随机数发生器的种子。
unionotherDataset返回一个新的数据集,其中包含源数据集中的元素和参数的并集。
intersectionotherDataset返回一个新的RDD,其中包含源数据集中的元素与参数的交集。
distinct ([ numTasks ]))返回一个新的数据集,其中包含源数据集的不同元素。
groupByKey([ numTasks ])在(K,V)对的数据集上调用时,返回(K,Iterable <V>)对的数据集。
注意:如果要分组以便对每个键执行聚合(例如求和或平均值),则使用reduceByKeyaggregateByKey将产生更好的性能。
注意:默认情况下,输出中的并行度取决于父RDD的分区数。您可以传递一个可选numTasks参数来设置不同数量的任务。
reduceByKeyfunc,[ numTasks ])在(K,V)对的数据集上调用时,返回(K,V)对的数据集,其中每个键的值使用给定的reduce函数func进行汇总,该函数必须为(V,V)=> V.与in一样groupByKey,reduce任务的数量可以通过可选的第二个参数进行配置。
aggregateByKeyzeroValue)(seqOpcombOp,[ numTasks ])在(K,V)对的数据集上调用时,返回(K,U)对的数据集,其中每个键的值使用给定的Combine函数和中性的“零”值进行汇总。允许与输入值类型不同的聚合值类型,同时避免不必要的分配。像in中一样groupByKey,reduce任务的数量可以通过可选的第二个参数进行配置。
sortByKey([  ascending  ],[ numTasks ])在由K实现Ordered的(K,V)对数据集上调用时,返回(K,V)对数据集,按布尔值指定,按键以升序或降序排序ascending
joinotherDataset,[ numTasks ])在(K,V)和(K,W)类型的数据集上调用时,将返回(K,(V,W))对的数据集,其中每个键都有所有成对的元素。外连接通过支持leftOuterJoinrightOuterJoinfullOuterJoin
cogroupotherDataset,[ numTasks ])在(K,V)和(K,W)类型的数据集上调用时,返回(K,(Iterable <V>,Iterable <W>))元组的数据集。此操作也称为groupWith
cartesianotherDataset在类型T和U的数据集上调用时,返回(T,U)对(所有元素对)的数据集。
pipecommand[envVars]通过shell命令(例如Perl或bash脚本)通过管道传输RDD的每个分区。将RDD元素写入进程的stdin,并将输出到其stdout的行作为字符串的RDD返回。
coalescenumPartitions将RDD中的分区数减少到numPartitions。筛选大型数据集后,对于更有效地运行操作很有用。
repartitionnumPartitions随机地重新随机排列RDD中的数据,以创建更多或更少的分区,并在整个分区之间保持平衡。这总是会通过网络重新整理所有数据。
repartitionAndSortWithinPartitionspartitioner根据给定的分区程序对RDD重新分区,并在每个结果分区中,按其键对记录进行排序。这比repartition在每个分区内调用然后排序更为有效,因为它可以将排序推入洗牌机制。

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

Actions-动作

下表列出了Spark支持的一些常见操作。请参考RDD API文档(Scala, Java, Python, R

并配对RDD函数doc(Scala和 Java)以获取详细信息。

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

Spark RDD API还公开了某些操作的异步版本,例如foreachAsyncfor foreach,它会立即将a返回FutureAction给调用方,而不是在操作完成时阻止。这可用于管理或等待动作的异步执行。


发表评论

电子邮件地址不会被公开。 必填项已用*标注