value类型的算子
处理数据类型为value型的算子(也就是这个算子只处理数据类型为value的数据),可以根据rdd的输入分区与输出分区的关系分为以下几个类型
(1)输入分区与输出分区一对一型
map型:对rdd的每个数据项,通过用户自定义的函数映射转换成一个新的rdd
上面4个方框表示4个rdd分区,当第一个方框中的rdd经过用户自定义的map函数从v1映射为v,1.这种操作只有等到action算子触发后,这个函数才会和其他的函数在一个stage中对数据进行运算

flagMap型:将原来的rdd通过用户自定义的函数,转化为一个新的rdd,然后再将每个新生成rdd中集合的每个元素合并成一个集合

 外部的大方框可以看做是一个rdd的分区,里面的小方框看做是rdd中的集合,小方框中的集合作为rdd的一个数据项,通过用户自定义的函数进行拆散,然后在对每个集合中的元素合并成一个集合
mapPartition型:通过这个函数可以每个分区的迭代器,这个迭代器可以可以对分区中的每个集合进行操作

 上图中的每一个方框代表一个rdd分区,这个分区通过用户自定义的函数对每个分区中的数据项进行过滤,将过滤后的数据转换为一个新的rdd
glom:是将rdd中的数据项转换为一个数组

 
(2)输入分区与输出分区为多对一型
union型:在使用union函数的时候要保证要合并的两个rdd数据类型保证一致,并且返回rdd的数据类型和被合并的rdd类型一致,在union的时候数据数据是不去重的,所有的元素都会保留,如果想去重可以使用distinct()函数

 cartesian型:就是对两个rdd对笛卡尔积操作

 
(3)输入分区与输出分区为多对多型
groupby型:将元素通过函数生成对应的key,然后再对key进行分组(将相同的key分为一组),groupbykey(key)对key进行分组,其中key就决定了分区的个数和分区的函数,和并行化的个数
(4)输出分区为输入分区的子集型
filter型:filter的功能是对rdd中的元素进行过滤,每个元素都应用于用户自定义的函数,返回值为true得以保留,false则会过滤掉
distinct型:对rdd中相同的元素进行去重
subtract型:subtract是对rdd进行减操作,比如过滤rdd1和rdd2 中有交集的元素

 sample型:sample会对rdd的所有元素进行采样,获取元素的子集。用户可以设置是否有放回的抽样,百分比,随机种子,从而决定采样的方式

 上图每一个方框是一个rdd分区,对rdd元素进行50%的采样。

 takeSample型:takeSample采样不是通过相对的比例采样,而是通过设定的个数进行采样,采样返回的结果也不是rdd,而是对采样后的数据进行collect(),返回的结果集合是单击的数组。

 
(5)还有一种输入分区与输出分区一对一型:cache型,cache分区对rdd的分区进行缓存
 cache型:cache就是将磁盘上的数据加载到内存里,相当于presiste(momory_only)函数功能

 presiste型:presiste会将数据缓存操作,至于缓存到哪里由storageLevel的枚举值来确定:
storageLevel:MEMONRY(内存),DIS(磁盘),SER(该数据是否要序列化存储)
  1. persist(newLevel:StorageLevel) //可你缓存的模式

(一)spark算子 分为3大类的更多相关文章

  1. (三)spark算子 分为3大类

    ation算子通过sparkContext执行提交作业的runJob,触发rdd的DAG执行 (foreach) foreach(f) 会对rdd中的每个函数进行f操作,下面的f操作就是打印输出没有元 ...

  2. (二)spark算子 分为3大类

     transgormation的算子对key-value类型的数据有三种: (1)输入 与 输出为一对一关系 mapValue();针对key-value类型的数据并只对其中的value进行操作,不对 ...

  3. dll的加载方式主要分为两大类,显式和隐式链接

    之前简单写过如何创建lib和dll文件及简单的使用(http://blog.csdn.net/betabin/article/details/7239200).现在先再深入点写写dll的加载方式. d ...

  4. CSS的选择器分为两大类

    CSS的选择器分为两大类:基本选择题和扩展选择器. 基本选择器: 标签选择器:针对一类标签 ID选择器:针对某一个特定的标签使用 类选择器:针对你想要的所有标签使用 通用选择器(通配符):针对所有的标 ...

  5. 03 Java的数据类型分为两大类 类型转换 八大基本类型

    数据类型 强类型语言:要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用 Java的数据类型分为两大类 基本类型(primitive type) 数值类型 整数类型 byte占1个字节范围: ...

  6. java的数据类型分为两大类

    java的数据类型分为两大类 基本类型(primitive type) 数据类型 整数类型 byte占一个字节范围:-128-127 short占两个字节范围:-32768-32767 int占四个字 ...

  7. C#的设计模式分为3大类23种

    创建型: 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4. 工厂方法模式(Factory Method ...

  8. hook 9大类

    HOOK技术主要分为两大类,一是内核层HOOK,一是用户层HOOK. 用户层HOOK也就是在ring3环境下hook kenerl32.dll.User3.dll.Gui32.dll.Advapi.d ...

  9. 【Java知识点专项练习】之 数据类型两大类

    Java的数据类型分为两大类:基本类型和引用类型: 基本类型只能保存一些常量数据,引用类型除了可以保存数据,还能提供操作这些数据的功能: 为了操作基本类型的数据,java也对它们进行了封装, 得到八个 ...

随机推荐

  1. (10)java基础知识-字符串

    String s和 new String 的区别 String s1="hello"; String s2= new String("hello"); Stri ...

  2. Python_Tips[6] -> is 和 == 的区别

    is和==的区别 / Difference between is and == 对于Python的对象来说,具有id/type/value三种特性,而在判断两个相等的is和==中,分别是对对象的id和 ...

  3. App Class Loader

    Java本身是一种设计的非常简单,非常精巧的语言,所以Java背后的原理也很简单,归结起来就是两点: 1.JVM的内存管理 理解了这一点,所有和对象相关的问题统统都能解决 2.JVM Class Lo ...

  4. Sum of bit differences among all pairs

    This article was found from Geeksforgeeks.org. Click here to see the original article. Given an inte ...

  5. Uva 11077 Find the Permutation

    可以发现最优的方案就是一个循环节内互换. 所以一个有n个元素,c个循环节的置换的交换次数(最少)是n-c. 然后就可以递推了,把i插入到前i-1个元素构成的置换中,要么新成立一个循环,要么加入到之前的 ...

  6. linux coreseek-4.1安装

    1.假设已经有coreseek-4.1-beta.tar.gz源文件 [root@qp232 ~]# cd /usr/local [root@qp232 local]# tar -zxvf /yd/l ...

  7. 个人博客 V0.0.3 版本 ...

    早就想弄个人博客网站,一直拖到现在...事情总是忙不完的,想能力提升的快,只能挤时间多练多写了,Keep On Unsleeping 以后原创的笔记都会在自己的博客网站写,博客园和简书就用来转发文章了 ...

  8. 我学MSMQ(一)

    一.通过这篇文章主要是对自己学习MSMQ进行小结,并希望能把自己的想法写出来,能和一些也正在研究MSMQ的朋友共同学习,并希望能给予指导和建议         二.首先是MSMQ的一些理论上的知识   ...

  9. iOS开发之字符串比较

    Object-c中比较两个字符串是否相等时,应该用isEqualToString:而不能仅仅只是比较字符串的指针值. NSString *str1=@"hello 1";  NSS ...

  10. samba 服务实现在windows共享文件

    1. 什么是samba Samba服务类似于windows上的共享功能,可以实现在Linux上共享文件,windows上访问,当然在Linux上也可以访问到. 是一种在局域网上共享文件和打印机的一种通 ...