在前面介绍了RDD之后,这里我们就要介绍下RDD的Transformaion和action操作。这里顺便提一句,在spark应用程序的生命周期里面它也有 数据源->Transformaion->action这样的生命周期,类似于现在很火的flink的生命周期(connector->transform->sink)形式上差不多。这篇文章我们介绍下Spark的Action。
Action是返回一个结果给驱动程序或者将结果写入存储的操作,并且开始一个计算,例如count())和first()等函数。在这里提示一下,一旦创建了RDD,只有在执行了action时才会执行各个转换。一个action的执行结果可以使将数据写入存储系统,也可以是返回到驱动程序,以便在本地做进一步的计算。常见的action操作函数有:
序号 | 函数 | 说明 |
1 | reduce(func) | 使用函数func(接受两个参数并返回一个参数)聚合数据集的元素。这个函数应该是交换律和结合律,这样才能并行地正确地计算它。 |
2 | collect() | 将RDD操作的所有结果返回给驱动程序。这通常对产生足够小的数据集的操作很有用。 |
3 | count() | 这将会返回数据集中的元素数量或RDD操作的结果输出。 |
4 | first() | 返回数据集的第一个元素或RDD操作产生的结果输出,他的工作原理类似于take(1)函数 |
5 | take(n) | 返回RDD的前n个元素。他首先扫描一个分区,然后使用该分区的结果来估计满足该限制所需的其他分区的数量。这个方法应该只在预期得到的数组很小的情况下使用,因为所有的数据都加载到驱动程序的内存中。 |
6 | top(n) | 按照指定的隐式排序[T]从这个RDD中取出最大的K个元素,并维护排序。这与takeOrdered相反,这个方法应该只在预期得到的数组并很小的情况下使用,因为所有的数据都加载到驱动程序的内存中 |
7 | takeSample(withReplacement,num,[seed]) | 返回一个数组,其中包含来自数据集的元素的num个随机样本,里面的参数含义如下: 1、withReplacement/withoutReplacement,这表示采样时有或者没有替换(在取多个样本时,他指示是否将旧的样本替换回集合,然后取一个新的样本或者在不替换的情况下取样本)。对于withReplacement,参数应该是True或者Falase 2、num这表示样本中元素的数量 3、seed,这是一个随机数生成器种子。 |
8 | takeOrdered(n) | 返回RDD的前n个(最小的)元素,并维护排序。这和top相反。这个方法应该只在预期得到的数组很小的情况下使用。因为所有的数据都加载到驱动程序的内存中。 |
9 | saveAsTextFile(path) | 将数据集的元素作为文本文件,存储到本地或者其他的文件系统里面(例如:hdfs) |
10 | countByKey() | 仅在类型(K,V)的RDDs上可用,返回(K,Int)对的hashmap和每个键的计数 |
11 | foreach(func) | 在数据集的每个元素上运行函数func。 |
还没有评论,来说两句吧...