对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. RobotFramework自动化测试框架-移动手机自动化测试Clear Text关键字的使用

    Clear Text关键字用来清除输入框的数据,该关键字接收一个参数[ locator ],这里的locator指的就是界面元素的定位方式. 示例1:Clear Text清除输入框数据时,采用reso ...

  2. MySql 中文乱码解决办法

    mysql存入的中文数据乱码,可能有这两个原因 原因一 : 数据源配置和mysql字符集编码不符,或数据源配置没有设置字符集 解决方案:在数据源配置添加字符集 useUnicode=true& ...

  3. composer设置忽略版本匹配

    composer install 时遇到错误: Your requirements could not be resolved to an installable set of packages. 原 ...

  4. 新书发布《每天5分钟玩转Docker容器技术》

    后台不时收到关于纸质版教程书籍的询问,今天终于可以给大家一个交代了. <每天5分钟玩转Docker容器技术>现已在各大书城上架. 比较了一下,目前京东上最实惠:https://item.j ...

  5. 基于Quartz实现简单的定时发送邮件

    一.什么是Quartz Quartz 是一个轻量级任务调度框架,只需要做些简单的配置就可以使用:它可以支持持久化的任务存储,即使是任务中断或服务重启后,仍可以继续运行.Quartz既可以做为独立的应用 ...

  6. JavaScript高级(01)

    前端开发工具 1.1. WebStorm介绍和下载 l  介绍 WebStorm是JetBrains 推出的一款强大的HTML5编辑工具,拥有丰富的代码快速编辑,可以智能的补全代码.代码格式化.htm ...

  7. H264常见术语名称

    一.术语 帧(frame)和场(field):一帧包含一个亮度矩阵采样点和俩个对应的色度矩阵采样点,一帧包含俩个场:顶场和底场: 条带:特定条带组按光栅扫描顺序排列的整数个宏块或宏块对: 条带组:图像 ...

  8. 关于python中的pickle函数

    8-7参考阅读 - 读文件.写文件.异常处理.文件保存游戏.pickle数据转成文本的过程又被称为"序列化",即将对象状态转换为可保持或传输的格式的过程.对应的,从序列化的格式中解 ...

  9. Mac上搭建基于Github的Hexo博客

    Mac 上搭建基于Github的hexo博客 博客地址:往事亦如风的博客 hexo官方文档 本来想搭一个自己的博客,但是因为服务器真心买不起,所以就使用gitpages搭建一个免费的博客. 环境配置 ...

  10. python爬取煎蛋网图片

    ``` py2版本: #-*- coding:utf-8 -*-#from __future__ import unicode_literimport urllib,urllib2,timeimpor ...