RDD转换算子Transformation(lazy):懒汉模式 (转换)

  • 一个数据集分成两个RDD,两个可能合并

map

  • 输入变换函数应用于RDD中所有元素

    val a = sc.parallelize(1 to 8)
    val b = a.map(s=>(s+1))
    b.collect
    

    flatMap *输入变换函数应用于RDD中所有元素,将所有对象合并为一个对象。

    sc.parallelize(1 to 10).flatMap(it=>it to 10).collect
    

    filter

    val a = sc.parallelize(1 to 9)
    val b = a.filter(s=>(s%2==0))
    b.collect
    

    mapValues

  • 在mapvalues上一个RDD中的Key不变与新的Values一起组成新的RDD

    val a = sc.parallelize(List("aa","bb","cc","dd"))
    val b=a.map(x=>(x.length,x))
    b.mapValues("x"+_+"x").collect
    

    MapPartitions

  • 由于单独运行于RDD的每个分区上(block),所以在一个类型为T的RDD上运行时,(fuction)必须时Iterator<>T=>Iterator类型的方法

    val date=sc.parallelize(1 to 10,3)
    def function(it:Iterator[Int]):Iterator[Int]={| var res = for(e <-it) yield e*2(yield相当缓冲)| res| }
    val result4=data.mapPartitions(function)
    result4.collect
    

    sample(withReplacement,fraction,seed)

  • withReplacement:是否放回,fraction:采样比列,seed:随机数生成的种子

    val date=sc.parallelize(1 to 10,3)
    val result6=date.sample(false,0.5,1).collect
    

    union()

  • 对于元数据集和其他数据集求并集,不去重

    value result7=date.union(result6)
    result7.collect
    

    intersection

  • 对于元数据集和其他数据集求并集,去重

    value result7=date.intersection(result6)
    result7.collect
    

    disinct

  • 返回一个在源数据集去重之后的新数据集,即去重,并局部无序而整体有序返回

    val date1=sc.parallelize(1 to 10,3)
    val result=date1.disinct
    result.collect
    

    groupByKey

  • 把键值对中相同的key值分组到一个集合序列中,其顺序是不确定 若一个键对应值太多,则易导致内存溢出。

    val data=sc.parallelize(1 to 10)
    val pair1=data.map(x=>{(x,1)})
    val pair2=data.map(x=>{(x,2)})
    val pair3=pair1.union(pair2)
    val groupedPair=pair3.groupByKey
    groupedPair.collect
    

    join

  • 将相同的key值提取出来,value值形成(x,y)

    val data=sc.parallelize(1 to 10)
    val pair1=data.map(x=>{(x,1)})
    val pair2=data.map(x=>{(x,2)})
    val joinpair=pair1.join(pair2,2).collect
    

    sortByKey(ascending,numTasks)

  • 根据key来进行排序,默认true升序

val data=sc.parallelize(1 to 10)
val pair1=data.map(x=>{(x,1)})
val pair2=data.map(x=>{(x,2)})
val pair3=pair1.union(pair2)
val sortPair=pair3.sortByKey(true,2)
sortPair=pair3.sortByKey(false,2)

RDD动作算子Action(non-lazy):饿汉模式(行动)

  • 根据多个RDD转换返回的都是具体的值

reduce

  • 将RDD中的元素两两传递,同时产生一个新值
val data=sc.parallelize(1 to 10)
data.reduce((a,b)=>a+b)//方法一
data.reduce(_+_)//方法二

take()

  • 取第几个值
val data = sc.parallelize(1 to 10)
data.take(2)
//结果
res17: Array[Int] = Array(1, 2)

转载于:https://www.cnblogs.com/tudousiya/p/11285744.html

spark 算子实例相关推荐

  1. spark算子详细介绍(v、k-v、vv类型)

    spark算子详细介绍 算子分区数.分区器如何确定? Value 类型 1. map() 改变结构就用map 2. mapPartitions() 以分区为单位执行Map 思考一个问题:map和map ...

  2. spark算子_Spark常用算子

    Spark的算子分类: 从大方向说,Spark算子大致可以分为以下两类: (1)Transformation变换/转换算子:这种变换并不触发提交作业,这种算子是延迟执行的,也就是说从一个RDD转换生成 ...

  3. Spark算子汇总和理解(详细)

    Spark之所以比Hadoop灵活和强大,其中一个原因是Spark内置了许多有用的算子,也就是方法.通过对这些方法的组合,编程人员就可以写出自己想要的功能.说白了spark编程就是对spark算子的使 ...

  4. Spark算子总结版

    Spark的算子的分类 从大方向来说,Spark 算子大致可以分为以下两类: 1)Transformation 变换/转换算子:这种变换并不触发提交作业,完成作业中间过程处理. Transformat ...

  5. 【原创 HadoopSpark 动手实践 6】Spark 编程实例与案例演示

     [原创 Hadoop&Spark 动手实践 6]Spark 编程实例与案例演示 Spark 编程实例和简易电影分析系统的编写 目标: 1. 掌握理论:了解Spark编程的理论基础 2. 搭建 ...

  6. Spark算子:统计RDD分区中的元素及数量

    Spark RDD是被分区的,在生成RDD时候,一般可以指定分区的数量,如果不指定分区数量,当RDD从集合创建时候,则默认为该程序所分配到的资源的CPU核数,如果是从HDFS文件创建,默认为文件的Bl ...

  7. spark学习-Spark算子Transformations和Action使用大全(Transformations章(一))

    spark学习-22-Spark算子Transformations和Action使用大全(Transformations章(一)) http://blog.csdn.net/qq_21383435/a ...

  8. Spark算子---实战应用

    Spark算子实战应用 数据集 :http://grouplens.org/datasets/movielens/ MovieLens 1M Datase 相关数据文件 : users.dat --- ...

  9. spark算子的分类

    spark内置了非常多有用的算子(方法),通过对这些算子的组合就可以完成业务需要的功能,spark的编程归根结底就是对spark算子的使用,因此非常有必要对这些内置算子进行详细的归纳. spark算子 ...

  10. Spark项目实战:购物网站评价标签生成(非常详细的Spark算子操作)

    实战概览 一.项目简介 1. 需求 2. 内容 二.项目的开发环境 三.项目代码编写 1. 项目搭建 2. 分析原始的数据 3. 编写JSON解析类 4. 编写数据处理类 5. 将项目打包成jar提交 ...

最新文章

  1. Composer使用
  2. 创新正当时 -「Innovation 2021」网易应用创新开发者大赛决赛十强正式集结
  3. php怎么克隆,利用php怎么对对象进行克隆
  4. jax-rs jax-ws_迟来总比没有好:SSE或服务器发送的事件现在已在JAX-RS中
  5. C——通过调用函数分配内存
  6. NoSQL那些事--Redis
  7. 排序 之 快排、归并、插入 - 时间复杂度----掌握思想和过程
  8. 什么是值传递?什么是引用传递?
  9. 从疫情中看智慧医疗场景新应用,智慧医疗纵深发展还有哪些可能性?
  10. Python基础(十): 函数的基本概念
  11. OpenCV cv.INTER_AREA和cv.INTER_CUBIC 还有cv.INTER_LINEAR
  12. 【个人作品】记之-串口日志记录工具
  13. 如何得到JavaVM,JNIEnv接口
  14. 产业分析:2021抖音数据报告
  15. 判断二极管导通例题_如何判断开关电源变压器的好坏
  16. 化合物分子 ogb、dgl生成图网络及GNN模型训练;pgl图框架
  17. 实战篇:手动编译安装微软 Linux 开源版 CBL-Mariner
  18. NLP--2 语言结构和传统pipeline
  19. 实现国际化(中英文切换)
  20. oracle常用日期格式,ORACLE常用日期数据格式

热门文章

  1. 博客园美化资源网站链接
  2. Android应用分析进阶教程之一- 初识JEBAPI
  3. mysql 5.5多实例部署
  4. 动态规划1——生产线调度问题(Dynamic Programming)
  5. 安装apache重启的时候,报错端口被占用,错误1
  6. 信息安全等级保护工作概述
  7. java 前后台传参数为json格式,如何取出
  8. 腾讯裁员内幕:顶层反思推动,PCG与CSIG影响最大
  9. 华为Java开发编程最新军规,谁违反谁滚蛋!
  10. Java关键字transient