《Spark Streaming实时流式大数据处理实战》 ——3.3.2 Action操作
3.3.2 Action操作
不同于Transformation操作,Action操作代表一次计算的结束,不再产生新的RDD,将结果返回到Driver程序。所以Transformation操作只是建立计算关系,而Action操作才是实际的执行者。每个Action操作都会调用SparkContext的runJob方法向集群正式提交请求,所以每个Action操作对应一个Job。
* count():RDD[T]=>Long,返回数据集的元素个数。
* countByKey():RDD[T]=>Map[T,Long],对(K,V)类型的RDD有效,返回一个(K,Int)对的Map,表示每一个key对应的元素个数。
* collect():RDD[T]=>Seq[T],将所有数据集以数组的形式汇总在Driver节点,需要注意的是,如果数据集很大,会“撑爆”Driver节点的内存,所以通常需要做些filter操作后,将一个子数据集合并在Driver节点。
* reduce(f:(T,T)=>T) : RDD[T]=>T,该函数有点像斐波那契数列,会将RDD内部的数据集按照顺序两两合并,直到产生最后一个值为止,并将其返回。即首先合并前两个元素,将结果与第三个元素合并,以此类推。
* saveAsTextFile(path:String),数据集内部的元素会调用其toString方法,转换为字符串形式,然后根据传入的路径保存成文本文件,既可以是本地文件系统,也可以是HDFS等。
* saveAsSequenceFile(path:String),数据集内部的元素,以Hadoop序列化文件的格式(sequence file),保存到指定的目录下‘本地系统’HDFS或者任何Hadoop支持的文件系统中。该操作要求RDD数据由key-value对组成,并实现了Hadoop的Writable接口,或者隐式地可以转换为Writable的RDD。
* saveAsObjectFile(path:String),利用Java的Serialization接口进行持久化操作,之后可以使用SparkContext.objectFile()重新load回内存。
* take(n),将数据集的前n个元素提取出来,汇总到Driver节点,以数组的形式返回。
* takeSample(withReplacement, num, [seed]),与take类似,只不过该操作会根据num和seed进行随机采样数据元素,然后汇总成数组,其中withReplacement参数可以设置是否放回采样。
* takeOrdered(n, [ordering]),返回前n个元素,可以使用元素的自然顺序,也可以使用用户自定义comparator。
* first(),返回数据集中的第一个元素,等同于take(1)操作。
* foreach(func),将函数func应用在数据集的每一个元素上,通常用于更新一个累加器,或者和外部存储系统进行交互,例如Redis。关于foreach,在后续章节中还会使用,到时会详细介绍它的使用方法及注意事项。
- 点赞
- 收藏
- 关注作者
评论(0)