spark算子

2018/08/07

Spark算子

  1. Map 对原数据进行处理,类似于遍历操作,转换成MappedRDD,原分区不变.
  2. flatMap 将原来的RDD中的每一个元素通过函数转换成新的元素,将RDD的每个集合中的元素合并成一个集合.比如一个元素里面多个list,通过这个函数都合并成一个大的list,最经典的就是wordcount中将每一行元素进行分词以后成为,通过flapMap变成一个个的单词,line.flapMap(.split(“ ”)).map((,1))如果通过map就会将一行的单词变成一个list.
  3. mapPartitions 对每个分区进行迭代,生成MapPartitionsRDD.
  4. Union 是将两个RDD合并成一个.使用这个函数要保证两个RDD元素的数据类型相同,返回的RDD的数据类型和被合并的RDD数据类型相同.
  5. Filter 其功能是对元素进行过滤,对每个元素调用f函数,返回值为true的元素就保留在RDD中.
  6. Distinct 对RDD中元素进行去重操作.
  7. Subtract 对RDD1中取出RDD1与RDD2交集中的所有元素.
  8. Sample 对RDD中的集合内元素进行采样,第一个参数withReplacement是true表示有放回取样,false表示无放回.第二个参数表示比例,第三个参数是随机种子.如data.sample(true, 0.3,new Random().nextInt()).
  9. takeSample 和sample用法相同,只不第二个参数换成了个数.返回也不是RDD,而是collect.
  10. Cache 将RDD缓存到内存中.相当于persist(MEMORY_ONLY).可以通过参数设置缓存和运行内存之间的比例,如果数据量大于cache内存则会丢失.
  11. Persist 里面参数可以选择DISK_ONLY/MEMORY_ONLY/MEMORY_AND_DISK等,其中的MEMORY_AND_DISK当缓存空间满了后自动溢出到磁盘.
  12. MapValues 针对KV数据,对数据中的value进行map操作,而不对key进行处理.
  13. reduceByKey 针对KV数据将相同key的value聚合到一起.与groupByKey不同,会进行一个类似mapreduce中的combine操作,减少相应的数据IO操作,加快效率.如果想进行一些非叠加操作,我们可以将value组合成字符串或其他格式将相同key的value组合在一起,再通过迭代,组合的数据拆开操作.
  14. groupByKey 对每个key进行操作,但只生成一个sequence。需要特别注意“Note”中的话,它告诉我们:如果需要对sequence进行aggregation操作(注意,groupByKey本身不能自定义操作函数),那么,选择reduceByKey/aggregateByKey更好。这是因为groupByKey不能自定义函数,我们需要先用groupByKey生成RDD,然后才能对此RDD通过map进行自定义函数操作。
  15. partitionBy 可以将RDD进行分区,重新生成一个ShuffleRDD,进行一个shuffle操作,对后面进行频繁的shuffle操作可以加快效率.
  16. randomSplit 对RDD进行随机切分.如data.randomSplit(new double[]{0.7, 0.3})返回一个RDD的数组.
  17. Cogroup 对两个RDD中的KV元素,每个RDD中相同key中的元素分别聚合成一个集合.与reduceByKey不同的是针对两个RDD中相同的key的元素进行合并.
  18. Join 相当于inner join.对两个需要连接的RDD进行cogroup,然后对每个key下面的list进行笛卡尔积的操作,输出两两相交的两个集合作为value. 相当于sql中where a.key=b.key.
  19. leftOutJoin/rightOutJoin 在数据库中左连接以左表为坐标将表中所有的数据列出来,右面不存在的用null填充.在这里面对join的基础上判断左侧的RDD元素是否是空,如果是空则填充.右连接则相反.
  20. saveAsTextFile 将数据输出到HDFS的指定目录.
  21. saveAsObjectFile 写入HDFS为SequenceFile格式.
  22. Collect/collectAsMap 将RDD转换成list或者Map.结果以List或者HashMap的方式输出.
  23. Count 对RDD的元素进行统计,返回个数.
  24. Top(k) 返回最大的k个元素,返回List的形式.
  25. Take 返回数据的前k个元素.
  26. takeOrdered 返回数据的最小的k个元素,并在返回中保持元素的顺序.

目录