java实现RDD算子

spark基础与java api介绍
http://www.cnblogs.com/tovin/p/3832405.html
 
 
textFile:                                                可将本地文件或HDFS文件转换成RDD,读取本地文件需要各节点上都存在,或者通过网络共享该文件
  JavaRDD lines = sc.textFile(uri, 1);

 

 
 
 
union:             合并两个RDD
       
 JavaRDD data1 = sc.textFile( "E:\\1.txt");
        JavaRDD data2 = sc.textFile( "E:\\2.txt");
        JavaRDD union = data1.union(data2);

 

 
 
saveAsTextFile:                                          将结果保存到HDFS中
  counts.saveAsTextFile (args[1]);

 

 
 
map:                 JavaRDD  ->  JavaRDD
  JavaRDD lineLengths = lines.map( new Function() {
  public Integer call(String s) { return s.length(); }
  });
JavaRDD> transactions = data.map(
  new Function>() {
  public List call(String line) {
  String[] parts = line.split( " ");
  return Arrays. asList(parts);
  }
  }
  );
 
 
       
          JavaRDD  ->  JavaRDD> 
     JavaRDD> transactions = data.map(
                   new Function>() {
                         public List call(String line) {
                              String[] parts = line.split( " ");
                               return Arrays. asList(parts);
                              }
                        }
                  );
 

 

 
 
        
 
 
 
reduce:               JavaRDD  ->  T
  
int totalLength = lineLengths.reduce( new Function2() {
  public Integer call(Integer a, Integer b) { return a + b; }
  });

 

 
 
flatmap:              JavaRDD -> JavaRDD             将一条 rdd数据使用你定义的函数给分解成多条 rdd数据
  
JavaRDD words = lines.flatMap (new FlatMapFunction() {
  public Iterable call(String s) {
  return Arrays.asList(SPACE.split(s));
  }
  });
 
  JavaRDD words = lines. flatMap( new FlatMapFunction() {
  public Iterable call(String s) {
  String[] words=s.split(" ");
  return Arrays.asList(words);
  }
  });

 

 
 
mapToPair:            JavaRDD ->  JavaPairRDD              pairFunction: T:输入类型;K,V:输出键值对
 
 JavaPairRDD ones = words.mapToPair( new PairFunction() {
  //scala.Tuple2 call(T t)
  //Tuple2为 scala中的一个对象,call方法的输入参数为T,即输入一个单词s,新的Tuple2对象的key为这个单词,计数为1
  public Tuple2 call(String s) {
  return new Tuple2(s, 1);
  }
  });

 

 
 
reduceByKey:           JavaPairRDD  ->  JavaPairRDD 
                                                                  调用Function2对象,Function2,输入两个参数,T1,T2,返回R,若ones有<"one", 1>, 
                                                         <"one", 1>,会根据"one"将相同的pair单词个数进行统计,输入为Integer,输出也为Integer,输出<"one", 2>
  JavaPairRDD counts = ones. reduceByKey( new Function2() {
  public Integer call(Integer i1, Integer i2) {
  return i1 + i2;
  }
  });

 

 
 
collect:               JavaRDD  ->   List>               返回一个包含RDD内所有元素的Array
 
 List> output = counts. collect();
  for (Tuple2 tuple : output) 
      System. out .println(tuple._1() + ": " + tuple._2());
  
 
  List line = lines.collect();
  for (String val:line)
      System. out .println(val);
 
 
  
 for(Tuple2> tuple :instruction_sets.collect()){
            System. out.println(tuple._1());
            Iterator it= tuple._2().iterator();
                   while(it.hasNext()){
                        System. out.println(it.next());
                  }
            System. out.println();
          }

 

filter:                JavaRDD  ->  JavaRDD                  定义一个返回 bool类型的函数,spark运行filter的时候会过滤掉那些返回只为false的数据    
 
 JavaRDD contaninsE = lines.filter( new Function() {
  public Boolean call(String s) throws Exception {
  return (s.contains("they" ));
  }
  });

 

 
sortByKey:          JavaPairRDD  ->  JavaPairRDD       把RDD记录按key值的字典序从小到大排序
 
 JavaPairRDD sort = counts.sortByKey();

 

 
groupByKey:         JavaPairRDD  ->  JavaPairRDD>
                   groupByKey()会使用RDD中的键来对数据进行分组。对于一个由类型K的键和类型V的值组成的 
                   RDD,锁的到的结果RDD类型会是[K,Iterable[v]]。以下是程序示例,对PairRDD调用
                   groupByKey()函数之后,会返回JavaPairRDD>类型的结果,也就
                   是所有同一个Key的value都可以调用Iterator进行遍历。
 
 JavaPairRDD> instruction_sets = user_instruction.groupByKey();      
        //用户-指令集 -> 指令集  并去掉重复元素
        JavaRDD> transactions = instruction_sets.map( new Function>, List>() {
                   @Override
                   public List call(Tuple2> sets)
                               throws Exception {
                         //将Iterable 转为List
                        List list = new ArrayList();
                   for(String s: sets. _2)
                        list.add(s);      
                   //删除重复元素
                  HashSet set = new HashSet(list);
                  ArrayList listWithoutDuplicateElements = new ArrayList(set);
                   return listWithoutDuplicateElements; 
                  }});

 

    小例子
List> list1=new ArrayList>();
    list1.add(new Tuple2(1,1));
    list1.add(new Tuple2(2,2));
    list1.add(new Tuple2(1,3));
    list1.add(new Tuple2(2,4));
    JavaPairRDD nums1=sc.parallelizePairs(list1);
 
    JavaPairRDD>results =nums1.groupByKey();
 
    //接下来遍历输出results,注意其中关于Iterable遍历的处理
    for(Tuple2> tuple :results.collect()){
      System.out.print(tuple._1()+": ");
      Iterator it= tuple._2().iterator();
      while(it.hasNext()){
      System.out.print(it.next()+" ");
      }
      System.out.println();
    }

 

 
 
 

你可能感兴趣的:(Spark)