对API的解释:

1.1 transform

l  map(func):对调用map的RDD数据集中的每个element都使用func,然后返回一个新的RDD,这个返回的数据集是分布式的数据集

l  filter(func) : 对调用filter的RDD数据集中的每个元素都使用func,然后返回一个包含使func为true的元素构成的RDD

l  flatMap(func):和map差不多,但是flatMap生成的是多个结果

l  mapPartitions(func):和map很像,但是map是每个element,而mapPartitions是每个partition

l  mapPartitionsWithSplit(func):和mapPartitions很像,但是func作用的是其中一个split上,所以func中应该有index

l  sample(withReplacement,faction,seed):抽样

l  union(otherDataset):返回一个新的dataset,包含源dataset和给定dataset的元素的集合

l  distinct([numTasks]):返回一个新的dataset,这个dataset含有的是源dataset中的distinct的element

l  groupByKey(numTasks):返回(K,Seq[V]),也就是Hadoop中reduce函数接受的key-valuelist

l  reduceByKey(func,[numTasks]):就是用一个给定的reduce func再作用在groupByKey产生的(K,Seq[V]),比如求和,求平均数

l  sortByKey([ascending],[numTasks]):按照key来进行排序,是升序还是降序,ascending是boolean类型

1.2 action

l  reduce(func):说白了就是聚集,但是传入的函数是两个参数输入返回一个值,这个函数必须是满足交换律和结合律的

l  collect():一般在filter或者足够小的结果的时候,再用collect封装返回一个数组

l  count():返回的是dataset中的element的个数

l  first():返回的是dataset中的第一个元素

l  take(n):返回前n个elements

l  takeSample(withReplacement,num,seed):抽样返回一个dataset中的num个元素,随机种子seed

l  saveAsTextFile(path):把dataset写到一个text file中,或者hdfs,或者hdfs支持的文件系统中,spark把每条记录都转换为一行记录,然后写到file中

l  saveAsSequenceFile(path):只能用在key-value对上,然后生成SequenceFile写到本地或者hadoop文件系统

l  countByKey():返回的是key对应的个数的一个map,作用于一个RDD

l  foreach(func):对dataset中的每个元素都使用func

以下是案例:



/*数据情况
 a 1
b 2
c 3
d 4

e 5*/

 

主函数:


public class SparkCoreTest 
{

    public static void main( String[] args )
    {
    if(args.length<1){
System.out.println("请输入参数!");
}

 String filepath=args[0];
        JavaSparkContext sc =JavaSparkContextFactory.getJavaSparkContext("sparkCoreTest");

     JavaRDD<String> rdd=sc.textFile(filepath);  

--transform
        //testSparkCoreApiMap(logData);
        //testSparkCoreApiFilter(rdd);
        //testSparkCoreApiFlatMap(rdd);
        
        //testSparkCoreApiUnion(rdd);
       // testSparkCoreApiDistinct(rdd);
       // testSparkCoreApiMaptoPair(rdd);
       //testSparkCoreApiGroupByKey(rdd);
        //testSparkCoreApiReduceByKey(rdd);

--action
        testSparkCoreApiReduce(rdd);
         


        
    }
    
    
    
    /**
     * Map主要是对数据进行处理,不进行数据集的增减
     * 
     * 本案例实现,打印所有数据
     * 
     * @param rdd
     */
    
    private static void testSparkCoreApiMap(JavaRDD<String> rdd){
    JavaRDD<String> logData1=rdd.map(new Function<String,String>(){
          public String call(String s){ 
          return s;
          }
         });
         List list = logData1.collect();
          for (int i = 0; i < list.size(); i++) {
          System.out.println(list.get(i));

  }
    
    }
   
    
    
   /*
    * 
    * 
    * filter主要是过滤数据的功能
    * 本案例实现:过滤含有a的那行数据
    * 
    * 
    */

    private static void testSparkCoreApiFilter(JavaRDD<String> rdd){
    JavaRDD<String> logData1=rdd.filter(new Function<String,Boolean>(){
          public Boolean call(String s){ 
         
        return (s.split(" "))[0].equals("a");
          }
         
         });
         List list = logData1.collect();
          for (int i = 0; i < list.size(); i++) {
          System.out.println(list.get(i));

  }
    
    }
    
    
    /*
     * 
     * 
     * flatMap  用户行转列
     * 本案例实现:打印所有的字符
     * 
     * 
     */

     private static void testSparkCoreApiFlatMap(JavaRDD<String> rdd){
    JavaRDD<String> words=rdd.flatMap(
           new FlatMapFunction<String, String>() {
               public Iterable<String> call(String s) throws Exception {
                   return Arrays.asList(s.split(" "));
               }
           }
    );
          List list = words.collect();
           for (int i = 0; i < list.size(); i++) {
          System.out.println(list.get(i));

  }
     
     }
    
     
    
     /**
      * testSparkCoreApiUnion 
      * 合并两个RDD
      * @param rdd
      */
     private static void testSparkCoreApiUnion(JavaRDD<String> rdd){
    JavaRDD<String> unionRdd=rdd.union(rdd);
    unionRdd.foreach(new VoidFunction<String>(){
    public void call(String lines){
    System.out.println(lines);
    }
    });
     }
     
     
     /**
      * testSparkCoreApiDistinct Test
      * 对RDD去重
      * @param rdd
      */
     private static void testSparkCoreApiDistinct(JavaRDD<String> rdd){
    JavaRDD<String> unionRdd=rdd.union(rdd).distinct();
    unionRdd.foreach(new VoidFunction<String>(){
    public void call(String lines){
    System.out.println(lines);
    }
    });
     }
     
     
     /**
      * testSparkCoreApiMaptoPair Test
      * 把RDD映射为键值对类型的数据
      * @param rdd
      */
     private static void testSparkCoreApiMaptoPair(JavaRDD<String> rdd){
     
    JavaPairRDD<String, Integer> pairRdd=rdd.mapToPair(new PairFunction<String,String,Integer>(){

@Override
public Tuple2<String, Integer> call(String t) throws Exception {
String[] st=t.split(" ");
return new Tuple2(st[0], st[1]);
}
     
    });
     
    pairRdd.foreach(new VoidFunction<Tuple2<String, Integer>>(){
@Override
public void call(Tuple2<String, Integer> t) throws Exception {
System.out.println(t._2());

}
});
     
     }
     
     
     
     /**
      * testSparkCoreApiGroupByKey Test
      * 对键值对类型的数据进行按键值合并
      * @param rdd
      */
     
     private static void testSparkCoreApiGroupByKey(JavaRDD<String> rdd){
     
    JavaPairRDD<String, Integer> pairRdd=rdd.mapToPair(new PairFunction<String,String,Integer>(){

@Override
public Tuple2<String, Integer> call(String t) throws Exception {
String[] st=t.split(" ");
return new Tuple2(st[0], Integer.valueOf(st[1]));
}
     
    });
     
    JavaPairRDD<String, Iterable<Integer>> pairrdd2= pairRdd.union(pairRdd).groupByKey();
    pairrdd2.foreach(new VoidFunction<Tuple2<String, Iterable<Integer>>>(){
  @Override
  public void call(Tuple2<String, Iterable<Integer>> t) throws Exception {
  Iterable<Integer> iter = t._2();  
                for (Integer integer : iter) {  
                System.out.println(integer);
                }  
   
 
  }
  });
    }
     
  
     /**
      * testSparkCoreApiReduceByKey 
      * 对键值对进行按键相同的对值进行操作
      * @param rdd
      */
     private static void testSparkCoreApiReduceByKey(JavaRDD<String> rdd){
     
    JavaPairRDD<String, Integer> pairRdd=rdd.mapToPair(new PairFunction<String,String,Integer>(){

  @Override
  public Tuple2<String, Integer> call(String t) throws Exception {
  String[] st=t.split(" ");
  return new Tuple2(st[0], Integer.valueOf(st[1]));
  }
       
      });
     
    JavaPairRDD<String, Integer> pairrdd2 =pairRdd.union(pairRdd).reduceByKey(
           new Function2<Integer,Integer,Integer>(){
@Override
public Integer call(Integer v1, Integer v2) throws Exception {
 
return v1+v2;
}
           } 
       ).sortByKey() ;
    pairrdd2.foreach(new VoidFunction<Tuple2<String, Integer>>(){
  @Override
  public void call(Tuple2<String, Integer> t) throws Exception { 
                  System.out.println(t._2());
  
  }
  });
     }
     
     
     /**
      * testSparkCoreApiReduce
      * 对RDD进行递归调用
      * @param rdd
      */
     private static void testSparkCoreApiReduce(JavaRDD<String> rdd){
    //由于原数据是String,需要转为Integer才能进行reduce递归
    JavaRDD<Integer> rdd1=rdd.map(new Function<String,Integer>(){

@Override
public Integer call(String v1) throws Exception {
// TODO Auto-generated method stub
return Integer.valueOf(v1.split(" ")[1]);
}  
    });
     
    Integer a= rdd1.reduce(new Function2<Integer,Integer,Integer>(){
@Override
public Integer call(Integer v1,Integer v2) throws Exception {
return v1+v2;
}  
    });
    System.out.println(a);
     
     }
     
     
    
}

 

(转)Spark JAVA RDD API的更多相关文章

  1. APACHE SPARK 2.0 API IMPROVEMENTS: RDD, DATAFRAME, DATASET AND SQL

    What’s New, What’s Changed and How to get Started. Are you ready for Apache Spark 2.0? If you are ju ...

  2. Spark Java API 计算 Levenshtein 距离

    Spark Java API 计算 Levenshtein 距离 在上一篇文章中,完成了Spark开发环境的搭建,最终的目标是对用户昵称信息做聚类分析,找出违规的昵称.聚类分析需要一个距离,用来衡量两 ...

  3. Spark Java API 之 CountVectorizer

    Spark Java API 之 CountVectorizer 由于在Spark中文本处理与分析的一些机器学习算法的输入并不是文本数据,而是数值型向量.因此,需要进行转换.而将文本数据转换成数值型的 ...

  4. spark (java API) 在Intellij IDEA中开发并运行

    概述:Spark 程序开发,调试和运行,intellij idea开发Spark java程序. 分两部分,第一部分基于intellij idea开发Spark实例程序并在intellij IDEA中 ...

  5. 在 IntelliJ IDEA 中配置 Spark(Java API) 运行环境

    1. 新建Maven项目 初始Maven项目完成后,初始的配置(pom.xml)如下: 2. 配置Maven 向项目里新建Spark Core库 <?xml version="1.0& ...

  6. Spark中RDD转换成DataFrame的两种方式(分别用Java和Scala实现)

    一:准备数据源     在项目下新建一个student.txt文件,里面的内容为: ,zhangsan, ,lisi, ,wanger, ,fangliu, 二:实现 Java版: 1.首先新建一个s ...

  7. Spark RDD API扩展开发

    原文链接: Spark RDD API扩展开发(1) Spark RDD API扩展开发(2):自定义RDD 我们都知道,Apache Spark内置了很多操作数据的API.但是很多时候,当我们在现实 ...

  8. spark中RDD的转化操作和行动操作

    本文主要是讲解spark里RDD的基础操作.RDD是spark特有的数据模型,谈到RDD就会提到什么弹性分布式数据集,什么有向无环图,本文暂时不去展开这些高深概念,在阅读本文时候,大家可以就把RDD当 ...

  9. [转]Spark学习之路 (三)Spark之RDD

    Spark学习之路 (三)Spark之RDD   https://www.cnblogs.com/qingyunzong/p/8899715.html 目录 一.RDD的概述 1.1 什么是RDD? ...

随机推荐

  1. 来自projecteuler.net网站的练习题2

    0.题目如下: Each new term in the Fibonacci sequence is generated by adding the previous two terms. By st ...

  2. MapReduce中Combiner规约的作用以及不能作为MR标配的原因

    作用:在Mapper端对数据进行Combine归约处理,Combine业务逻辑与Reducer端做的完全相同.处理后的数据再传送到Reducer端,再做一次归约.这样的好处是减少了网络传输的数量.在M ...

  3. 前端系列——jquery前端国际化解决方案“填坑日记”

    前言:最近,新的平台还没有开发完成,原来的老项目又提出了新的需求:系统国际化.如果是前后端完全分离的开发模式,要做国际化,真的太简单了,有现成的解决方案,基于Node构建的时下热门的任何一种技术选型都 ...

  4. python基础之条件循环语句

    前两篇说的是数据类型和数据运算,本篇来讲讲条件语句和循环语句. 0x00. 条件语句 条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块. 可以通过下图来简单了解条件语 ...

  5. poj2337欧拉回路要求输出路径

                         Catenyms Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8368   Ac ...

  6. Theano学习-scan循环

    \(1.Scan\) 通用的一般形式,可用于循环 减少和映射(对维数循环)是特殊的 \(scan\) 对输入序列进行 \(scan\) 操作,每一步都能得到一个输出 \(scan\) 能看到定义函数的 ...

  7. cnpm的全局安装

    npm install -g cnpm --registry=https://registry.npm.taobao.org

  8. windows无法启动MySQL服务 错误1067

    启动wampmysqld 出现 1067 错误 解决方法:删除在MySQL安装目录下的Data目录中的ib_logfile0和ib_logfile1这两个文件. 重新启动MySQL服务

  9. 基于LoadRunner11,以wifi热点方式录制APP脚本简单指导

    本想详细写下操作过程,但并不觉着十分必要,通过baidu或我要自学网均能找到相关资料,所以详细操作过程不再赘述,只是把过程中遇到的问题说明下解释下,让大家“录制APP”的路更平坦! 1.如何使用Loa ...

  10. java web 项目 图书管理系统的设计与实现

     java web 项目 图书管理系统的设计与实现