Spark 算子大致可以分为以下两类:

1)Transformation 变换/转换算子:这种变换并不触发提交作业。

     这种操作是延迟计算的,也就是说从一个RDD 转换生成另一个 RDD的转换的操作并不会马上执行,而是要等到有 Action 操作的时候才会触发。

2)Action 行动算子:这类算子会触发 SparkContext 提交 Job 作业。

     Action 算子会触发 Spark 提交作业(Job),并将数据输出 Spark系统。

 

  而Transformation算子有可以分为2类:

  1)Value数据类型的Transformation算子,针对处理的数据项是Value型的数据。
  2)Key-Value数据类型的Transfromation算子,针对处理的数据项是Key-Value型的数据对。

1、Transformations 算子
map

  将原来RDD的每个数据项通过 map 中的用户自定义函数 f 映射转变为一个新的元素。

flatMap
将原来 RDD 中的每个元素通过函数 f 转换为新的元素,并将生成的 RDD 的每个集合中的元素合并为一个集合。

groupBy
  groupBy :将元素通过函数生成相应的 Key,数据就转化为 Key-Value 格式,之后将 Key 相同的元素分为一组。

filter
filter 函数功能是对元素进行过滤,对每个 元 素 应 用 f 函 数, 返 回 值 为 true 的 元 素 在RDD 中保留,返回值为 false 的元素将被过滤掉。

2、Actions 算子

foreach
  foreach 对 RDD 中的每个元素都应用 f 函数操作,不返回 RDD 和 Array, 而是返回Uint。

foreachPartition
  foreachPartition和foreach类似,只不过是对每一个分区使用f。一份待处理的原始数据会被按照相应的逻辑(例如jdbc和hdfs的split逻辑)切分成n份,每份数据对应到RDD中的一个Partition,Partition的数量决定了task的数量,影响着程序的并行度.

saveAsTextFile
  函数将数据输出,存储到 HDFS 的指定目录。

collect
  将分布式的 RDD 返回为一个单机的 scala Array 数组。在这个数组上运用 scala 的函数式操作。

count
  返回整个 RDD 的元素个数。

saveAsNewAPIHadoopDataset(org.apache.hadoop.conf.Configuration conf)
  把task中的数据通过指定的output format写入到hadoop的实现接口中(例如把JavaPairRDD<ImmutableBytesWritable, Put>类型的数据写入到Hbase中)