Spark在提交后通过数据输入形成RDD,然后就可以通过转换算子(如filter,map)对数据进行操作并将RDD转换为新的RDD,然后通过action算子,出发Spark提交作业
转换操作:
- 转换操作有值类型的和键值(key/value)类型的转换,两者都不会触发提交作业
- map:最常见的操作即将rdd中每个数据想通过用户自定函数映射成新的元素,如rdd1:RDD[Int],rdd1.map(f=>(f,f*f))
- flatMap(func):类似于map,但每一个输入元素可以被映射成为一个或多个输出元素
- filter(func):返回一个经过过滤后的新数据集,过滤方式为func自定义的任意类型,对于每个项进行操作,返回true的数据项进行保留,新的数据集为上一个的子集
- mapPartitions:获取每个分区的迭代器,在函数中通过这个分区的整体迭代器对整个分区的元素进行操作
- union:合并两个相同类型的rdd,并且不进行去重操作,类似于sql的中union,由于没有union all操作,如果要去重的话可以使用rdd.distinct,rdd1++rdd2相当于union操作
- subtract:相当于两个rdd进行差集的操作,如rdd1.subtract(rdd2),相当于去除rdd1中所有不存在rdd2中的元素,有点类似not in操作
- filter(f):过滤用的,过滤符合f函数或表达式为true的数据出来
- distinct();返回一个去重后的新的Rdd
- groupByKey():返回聚合之后Key-Value集合Dataset,例如{[1,2],[1,3],[2,4],[2,4]},groupByKey之后{[1,[2,3]],[2,[4,4]]}
Action操作
- reduce(f):将Rdd聚集,使用指定的可交换和关联的二进制运算符减少此RDD的元素。
- collect():返回Rdd中所有的集合,量大的谨慎使用
- count() :获取RDD集合中元素个数
- first():返回第一个元素
- take(n):获取rdd中前N个元素
- foreach(f):将函数f应用于此RDD的所有元素
- saveAsTextFile(path: String, codec: Class[_ <: CompressionCodec]):将Rdd存储为text 文件,一般在hdfs中,rdd中每个元素为一行