RDD的两种操作

  1.Tansformation(转化操作):返回值还是一个RDD

  2.Action(行动操作):返回值不是一个RDD

     第一种Transformation是返回一个新的RDD,如map(),filter()等。这种操作是lazy(惰性)的,即从一个RDD转换生成另一个RDD的操作不是马上执行,只是记录下来,只有等到有Action操作是才会真正启动计算,将生成的新RDD写到内存或hdfs里,不会对原有的RDD的值进行改变。而Action操作才会实际触发Spark计算,对RDD计算出一个结果,并把结果返回到内存或hdfs中,如count(),first()等。
     通俗点理解的话,就是假设你写了一堆程序,里面对数据进行了多次转换,这个时候实际上没有计算,就只是放着这里。在最后出结果的时候会用到Action操作,这个时候Action会执行与之相关的转换操作,运算速度会非常快(一是Action不一定需要调用所有的transformation操作,二是只有在最后一步才会计算相关的transformation操作)。如果Transformation没有lazy性质的话,每转换一次就要计算一次,最后Action操作的时候还要计算一次,会非常耗内存,也会极大降低计算速度。

     还有一种情况,如果我们想多次使用同一个RDD,每次都对RDD进行Action操作的话,会极大的消耗Spark的内存,这种情况下,我们可以使用RDD.persist()把这个RDD缓存下来,在内存不足时,可以存储到磁盘(disk)里。在Python中,储存的对象永远是通过Pickle库序列化过的,所以社不设置序列化级别不会产生影响。

---恢复内容结束---

1, RDD的两种操作

  1.Tansformation(转化操作):返回值还是一个RDD

  2.Action(行动操作):返回值不是一个RDD

     第一种Transformation是返回一个新的RDD,如map(),filter()等。这种操作是lazy(惰性)的,即从一个RDD转换生成另一个RDD的操作不是马上执行,只是记录下来,只有等到有Action操作是才会真正启动计算,将生成的新RDD写到内存或hdfs里,不会对原有的RDD的值进行改变。而Action操作才会实际触发Spark计算,对RDD计算出一个结果,并把结果返回到内存或hdfs中,如count(),first()等。
     通俗点理解的话,就是假设你写了一堆程序,里面对数据进行了多次转换,这个时候实际上没有计算,就只是放着这里。在最后出结果的时候会用到Action操作,这个时候Action会执行与之相关的转换操作,运算速度会非常快(一是Action不一定需要调用所有的transformation操作,二是只有在最后一步才会计算相关的transformation操作)。如果Transformation没有lazy性质的话,每转换一次就要计算一次,最后Action操作的时候还要计算一次,会非常耗内存,也会极大降低计算速度。

     还有一种情况,如果我们想多次使用同一个RDD,每次都对RDD进行Action操作的话,会极大的消耗Spark的内存,这种情况下,我们可以使用RDD.persist()把这个RDD缓存下来,在内存不足时,可以存储到磁盘(disk)里。在Python中,储存的对象永远是通过Pickle库序列化过的,所以社不设置序列化级别不会产生影响。
 
 
 
 

RDD基础的更多相关文章

  1. RDD基础-笔记

    RDD编程 基础Spark中的RDD是一个不可变的分布式对象集合.每个RDD都被分为多个分区,这些分区运行在集群中的不同节点上.RDD可以包含Python.java.Scala中任意类型的对象,甚至可 ...

  2. Spark_RDD之RDD基础

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

  3. spark Pair RDD 基础操作

    下面是Pair RDD的API讲解 转化操作 reduceByKey:合并具有相同键的值: groupByKey:对具有相同键的值进行分组: keys:返回一个仅包含键值的RDD: values:返回 ...

  4. Spark Core源代码分析: RDD基础

    RDD RDD初始參数:上下文和一组依赖 abstract class RDD[T: ClassTag]( @transient private var sc: SparkContext, @tran ...

  5. spark入门(二)RDD基础操作

    1 简述 spark中的RDD是一个分布式的元素集合. 在spark中,对数据的所有操作不外乎创建RDD,转化RDD以及调用RDD操作进行求值,而这些操作,spark会自动将RDD中的数据分发到集群上 ...

  6. Spark快速大数据分析之RDD基础

    Spark 中的RDD 就是一个不可变的分布式对象集合.每个RDD 都被分为多个分区,这些分区运行在集群中的不同节点上.RDD 可以包含Python.Java.Scala中任意类型的对象,甚至可以包含 ...

  7. Spark基础:(二)Spark RDD编程

    1.RDD基础 Spark中的RDD就是一个不可变的分布式对象集合.每个RDD都被分为多个分区,这些分区运行在分区的不同节点上. 用户可以通过两种方式创建RDD: (1)读取外部数据集====> ...

  8. Catalyst揭秘 Day7 SQL转为RDD的具体实现

    Catalyst揭秘 Day7 SQL转为RDD的具体实现 从技术角度,越底层和硬件偶尔越高,可动弹的空间越小,而越高层,可动用的智慧是更多.Catalyst就是个高层的智慧. Catalyst已经逐 ...

  9. Spark 核心概念 RDD 详解

    RDD全称叫做弹性分布式数据集(Resilient Distributed Datasets),它是一种分布式的内存抽象,表示一个只读的记录分区的集合,它只能通过其他RDD转换而创建,为此,RDD支持 ...

随机推荐

  1. JSP中使用<c:forEach>标签循环遍历元素

    转载:http://blog.csdn.net/hero_cheng/article/details/51924577

  2. python和shell获取命令行参数的区别

    一.命令行参数的取得对于一些功能性的脚本来说非常有用,不至于将功能写死在脚本中. shell的命令行参数直接用 $ 1,$2 等就可以直接获取 其中 $1 表示 第二个参数,即命令行的第一个参数,因为 ...

  3. Python 双向队列Deque、单向队列Queue 模块使用详解

    Python 双向队列Deque 模块使用详解 创建双向队列Deque序列 双向队列Deque提供了类似list的操作方法: #!/usr/bin/python3 import collections ...

  4. Leetcode 260.只出现一次的数字III

    只出现一次的数字III 给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次. 找出只出现一次的那两个元素. 示例 : 输入: [1,2,1,3,2,5] 输出: [3,5 ...

  5. 【Ural1297】Palindrome(后缀数组)

    题意:求一个字符串的最长回文子串 n<=1000 思路:这是一道论文题 需要注意的细节: 1.奇偶分类 2.中间的分割符与最后的附加字母都是最小值,但两者不能相同,否则height可能会出现问题 ...

  6. RedisDesktopManager 踩坑之旅

    虚拟机上装了redis, 本地Windows的RedisDesktopManager  connect failed. 解决方法: 1.修改 redis.conf 文件 bind 127.0.0.1 ...

  7. HDU 5700 区间交

    枚举起点 二分终点 树状数组check #include<iostream> #include<cstring> #include<cmath> #include& ...

  8. HDU——2768 Cat vs. Dog

    Cat vs. Dog Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  9. 搭建Spring+mybatis报错

    java.lang.ClassCastException: com.sun.proxy.$Proxy12 cannot be cast to com.bdqn.service.impl.UserSer ...

  10. Linux下异常信号

    我们介绍一些标准信号的名称以及它们代表的事件.每一个信号名称是一个代表正整数的宏,但是你不要试图去推测宏代表的具体数值,而是直接使用名称.这是因为这个数值会随不同的系统或同样系统的不同版本而不同,但是 ...