对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. docker应用笔记

    first install it: 首先安装: apt install docker.io 基本概念: 镜像:相当于虚拟机里的磁盘文件,里面有一套配置好的系统,应用程序 容器:相当于一个虚拟机实例,一 ...

  2. 【Python学习笔记之一】Python关键字及其总结

    前言 最近在学习Java Sockst的时候遇到了一些麻烦事,我觉得我很有必要重新研究学习Python这种脚本语言,参考大神的经验,淘到了一本学习Python的好书<"笨方法" ...

  3. RMQ-ST算法的理解与实现(C++)

    RMQ-ST的含义 RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返 ...

  4. jenkins~集群分发功能和职责处理

    jenkins的多节点集群 在进行自动化部署时,你可以按着它们的项目类型去进行分别部署,这样即可以达到负载均衡,又可以达到一种职责的明确,比如像java的项目你可以使用linux服务来进行部署(拉代码 ...

  5. RAID及热备盘详解

    RAID,为Redundant Arrays of Independent Disks的简称,中文为廉价冗余磁盘阵列. 一.出现的原因(RAID的优点): 它的用途主要是面向服务器,但现在的个人电脑由 ...

  6. vue语法之拼接字符串

    先来一行代码: <div class="swiper-slide" v-for="item in message"> <img v-bind: ...

  7. PE文件格式详解,第三讲,可选头文件格式,以及节表

    PE文件格式详解,第三讲,可选头文件格式,以及节表 作者:IBinary出处:http://www.cnblogs.com/iBinary/版权所有,欢迎保留原文链接进行转载:) 一丶可选头结构以及作 ...

  8. zoj1797 Least Common Multiple 最小公倍数

    Least Common Multiple Time Limit: 2 Seconds      Memory Limit: 65536 KB The least common multiple (L ...

  9. Oracle虚拟机VirtualBox安装成功后的注意事项

    首先VirtualBox的安装教程 (1)按文档安装 (2)安装完之后配置共享文件夹 (3)安装windowxp镜像 (4)安装Oracle  详情请见Oracle安装文档 (5)启动xp虚拟机 (6 ...

  10. 发布系统Git使用指南 - the Git Way to Use Git

    发布系统Git使用指南 --the Git Way to Use Git 背景 ​ 有文章曾归纳,Git是一套内容寻址文件系统,意思是,Git的核心是存储键值对^[1]^.显然,这样的形式不利于普通人 ...