spark map flatMap flatMapToPair mapPartitions 的区别和用途

  1. import akka.japi.Function2;

  2. import org.apache.spark.HashPartitioner;

  3. import org.apache.spark.SparkConf;

  4. import org.apache.spark.api.java.JavaPairRDD;

  5. import org.apache.spark.api.java.JavaRDD;

  6. import org.apache.spark.api.java.JavaSparkContext;

  7. import org.apache.spark.api.java.function.FlatMapFunction;

  8. import org.apache.spark.api.java.function.Function;

  9. import org.apache.spark.api.java.function.PairFlatMapFunction;

  10. import org.apache.spark.storage.StorageLevel;

  11. import scala.Tuple2;

  12.  
  13. import java.io.File;

  14. import java.io.Serializable;

  15. import java.util.ArrayList;

  16. import java.util.Arrays;

  17. import java.util.Iterator;

  18. import java.util.List;

  19.  
  20. /**

  21. * map flatMap flatMapToPair mapPartitions 的区别和用途

  22. *

  23. * 例如数据是:name:gaoyue age:28

  24. *

  25. * 方法一:map,我们可以看到数据的每一行在map之后产生了一个数组,那么rdd存储的是一个数组的集合

  26. * rdd存储的状态是Array[Array[String]] = Array(Array(name, gaoyue), Array(age, 28))

  27. *Array[String] = Array(name, gaoyue, age, 28)

  28. */

  29.  
  30. JavaRDD mapresult=lines.map(new Function() {

  31.  
  32. @Override

  33. public String[] call(String s) throws Exception {

  34. return s.split(":");

  35. }

  36. });

  37.  
  38.  
  39.  
  40.  
  41. /**

  42. * 方法二:flatMap

  43. * 操作1:同map函数一样:对每一条输入进行指定的操作,然后为每一条输入返回一个对象

  44. * 操作2:最后将所有对象合并为一个对象

  45. */

  46. JavaRDD objectJavaRDD = lines.flatMap(new FlatMapFunction() {

  47.  
  48. @Override

  49. public Iterable call(String s) throws Exception {

  50. return Arrays.asList(s.split(" "));

  51. }

  52. });

  53.  
  54. /**

  55. * 方法三:

  56. * mappartition

  57. *rdd的mapPartitions是map的一个变种,它们都可进行分区的并行处理。两者的主要区别是调用的粒度不一样:

  58. * map的输入变换函数是应用于RDD中每个元素,而mapPartitions的输入函数是应用于每个分区。也就是把每个分区中的内容作为整体来处理的。

  59. *

  60. */

  61. lines2.mapPartitions(new FlatMapFunction, String>() {

  62. ArrayList results = new ArrayList();

  63.  
  64. @Override

  65. public Iterable call(Iterator s) throws Exception {

  66. while (s.hasNext()) {

  67. results.addAll(Arrays.asList(s.next().split(":")));

  68. }

  69. return results;

  70. }

  71. }).saveAsTextFile("/Users/luoluowushengmimi/Documents/result");

  72.  
  73. /**

  74. * flatMapToPair

  75. * 操作1:同map函数一样:对每一条输入进行指定的操作,然后为每一条输入返回一个key-value对象

  76. * 操作2:最后将所有key-value对象合并为一个对象 Iterable>

  77. *

  78. */

  79.  
  80. JavaPairRDD pair=lines.flatMapToPair(new PairFlatMapFunction() {

  81.  
  82. @Override

  83. public Iterable> call(String s) throws Exception {

  84. String[] temp=s.split(":");

  85. ArrayList> list=new ArrayList>();

  86. list.add(new Tuple2(temp[0],temp[1]));

  87. return list;

  88. }

  89. });

你可能感兴趣的:(spark)