1.转化操作

  转化操作是返回一个新的RDD的操作,我们可以使用filter()方法进行转化。举个使用scala进行转化操作的例子。

  def main(args: Array[String]): Unit = {
    val conf = new SparkConf();
    conf.setAppName("trans");
    conf.setMaster("local");
    //SparkContext对象代表对Spark集群的一个连接
    val sc = new SparkContext (conf);
    val inputRdd = sc.textFile("E:\\file\\word.txt");
    //转化操作 filter(),过滤出inputRdd中是"daijun"的字符串
    val daijunRdd = inputRdd.filter(daijun => daijun.contains("daijun"));
    println(daijunRdd.countByValue());
  }

  其对应的Java代码如下:

    public static void main(String[] args) {
        SparkConf conf = new SparkConf();
        conf.setAppName("trans");
        conf.setMaster("local");
        JavaSparkContext sc = new JavaSparkContext(conf);
        JavaRDD<String> rdd = sc.textFile("E:\\file\\word.txt");
        JavaRDD<String> daijunRdd = rdd.filter(new Function<String, Boolean>() {
            private static final long serialVersionUID = 1L;
            public Boolean call(String x) throws Exception {
                return x.contains("daijun");
            }
        });
        System.out.println(daijunRdd.countByValue().toString());
        sc.close();
    }

2.行动操作

  行动操作时对RDD进行实际的计算的操作,产生实际的输出。在以上的基础上,举一个行动操作的例子,我们使用count()方法来取得我们想要的单词的个数。

  scala代码:

   def main(args: Array[String]): Unit = {
    val conf = new SparkConf();
    conf.setAppName("trans");
    conf.setMaster("local");
    //SparkContext对象代表对Spark集群的一个连接
    val sc = new SparkContext(conf);
    val inputRdd = sc.textFile("E:\\file\\word.txt");
    //转化操作 filter(),过滤出inputRdd中是"daijun"的字符串
    val daijunRdd = inputRdd.filter(daijun => daijun.contains("daijun"));
    //使用count()方法 返回计数结果
    println(daijunRdd.count());
    daijunRdd.take(2).foreach(println);
  }

  Java代码

    public static void main(String[] args) {
        SparkConf conf = new SparkConf();
        conf.setAppName("trans");
        conf.setMaster("local");
        JavaSparkContext sc = new JavaSparkContext(conf);
        JavaRDD<String> rdd = sc.textFile("E:\\file\\word.txt");
      //JavaRDD<String> daijunRdd = rdd.filter(s -> s.contains("daijun"));
        JavaRDD<String> daijunRdd = rdd.filter(new Function<String, Boolean>() {
            private static final long serialVersionUID = 1L;

            public Boolean call(String x) throws Exception {
                return x.contains("daijun");
            }
        });
        System.out.println(daijunRdd.count());
        for(String line: daijunRdd.take(2)){
            System.out.println(line);
        }
        sc.close();
    }

note:在调用一个新的行动操作时,RDD都会从头计算,会使效率低下。要避免这种行为,可以将RDD持久化。

3.惰性求值

  意思是在RDD进行行动操作之前Spark不会开始计算。在进行转化操作时,Spark会记录相关操作的信息,在需要时才会去执行它。

Spark_RDD之RDD操作简介的更多相关文章

  1. Spark中的RDD操作简介

    map(func) 对数据集中的元素逐一处理,变为新的元素,但一个输入元素只能有一个输出元素 scala> pairData.collect() res6: Array[Int] = Array ...

  2. Spark学习(一)--RDD操作

    标签(空格分隔): 学习笔记 Spark编程模型的两种抽象:RDD(Resilient Distributed Dataset)和两种共享变量(支持并行计算的广播变量和累加器). RDD RDD是一种 ...

  3. RDD操作

    RDD操作 1.对一个数据为{1,2,3,3}的RDD进行基本的RDD转化操作 函数名 目的 示例 结果 map() 函数应用于RDD中的每个元素 rdd.map(x=>x+1) {2,3,4, ...

  4. Spark编程模型及RDD操作

    转载自:http://blog.csdn.net/liuwenbo0920/article/details/45243775 1. Spark中的基本概念 在Spark中,有下面的基本概念.Appli ...

  5. Spark 键值对RDD操作

    键值对的RDD操作与基本RDD操作一样,只是操作的元素由基本类型改为二元组. 概述 键值对RDD是Spark操作中最常用的RDD,它是很多程序的构成要素,因为他们提供了并行操作各个键或跨界点重新进行数 ...

  6. SVN SVN合并(Merge)与拉取分支(Branch/tag)操作简介

    SVN合并(Merge)与拉取分支(Branch/tag)操作简介 合并(Merge) 例子:把对feature_branch\project_name_v3.3.7_branch的修改合并到deve ...

  7. Spark_RDD之RDD基础

    1.什么是RDD RDD(resilient distributed dataset)弹性分布式数据集,每一个RDD都被分为多个分区,分布在集群的不同节点上. 2.RDD的操作 Spark对于数据的操 ...

  8. SPARKR,对RDD操作的介绍

    (转载)SPARKR,对RDD操作的介绍   原以为,用sparkR不能做map操作, 搜了搜发现可以. lapply等同于map, 但是不能操作spark RDD. spark2.0以后, spar ...

  9. spark RDD操作的底层实现原理

    RDD操作闭包外部变量原则 RDD相关操作都需要传入自定义闭包函数(closure),如果这个函数需要访问外部变量,那么需要遵循一定的规则,否则会抛出运行时异常.闭包函数传入到节点时,需要经过下面的步 ...

随机推荐

  1. Java并发(三)线程池原理

    Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池.在开发过程中,合理地使用线程池能够带来3个好处. 1. 降低资源消耗.通过重复利用已创建的线程降低线程 ...

  2. AI Factorization Machine(FM)算法

    FM算法 参考链接: https://www.csie.ntu.edu.tw/~b97053/paper/Rendle2010FM.pdf

  3. 【Codeforces 17E】Palisection

    Codeforces 17 E 题意:给一个串,求其中回文子串交叉的对数. 思路1:用哈希解决.首先求出每个点左右最长的回文串(要分奇数长度和偶数长度),然后记录经过每个点的回文串的个数,以及它们是在 ...

  4. co模块源码学习笔记

    // Sorrow.X --- 添加注释,注释纯属个人理解 /** * slice变量 引用 数组的 slice方法 */ var slice = Array.prototype.slice; /** ...

  5. Omi-touch实战 移动端图片轮播组件的封装

    pc端的轮播,移动端的轮播都很常见.一年前,我还为手机端没有左滑,右滑事件从而封装了一个swipe库,可以自定义超过多少滑动时间就不触发,也可以设置滑动多少距离才触发,这一个功能的代码就达到400多行 ...

  6. CDH hive-1.1.0-cdh5.10.0 安装

    又重新安装Hive,记录一下吧: hadoop早已经装上了. cdh5的hive下载地址: http://archive.cloudera.com/cdh5/cdh/5/ 下载文件:hive-1.1. ...

  7. Struts学习总结-02 上传文件

    Struts 2框架提供了内置支持处理文件上传使用基于HTML表单的文件上传.上传一个文件时,它通常会被存储在一个临时目录中,他们应该由Action类进行处理或移动到一个永久的目录,以确保数据不丢失. ...

  8. CF1106F Lunar New Year and a Recursive Sequence 原根、矩阵快速幂、BSGS

    传送门 好久没写数论题了写一次调了1h 首先发现递推式是一个乘方的形式,线性递推和矩阵快速幂似乎都做不了,那么是否能够把乘方运算变成加法运算和乘法运算呢? 使用原根!学过\(NTT\)的都知道\(99 ...

  9. .NET开发微信小程序-生成二维码 - 转

    1.生成小程序二维码功能 直接请求相应的链接.传递相应的参数 以生成商铺的付款码为例: var shopsId = e.ShopsId //付款码的参数 var codeModel = new fun ...

  10. 如何使用串口来给STM32下载程序

    前言 第一次学习STM32的时候,不知道有调试器这个东西,所以一直是通过串口来给STM32下载程序,下载速度也还算可以,一般是几秒钟完成.后来用了调试器,可以直接在Keil环境下进行下载,而且还可以进 ...