RDDs基本操作Transformation和action
来源:互联网 发布:制作视频字幕软件 编辑:程序博客网 时间:2024/06/06 00:03
首先先了解一下这些概念:
Spark 对数据的核心抽象—弹性分布式数据集(Resilient Distributed Dataset,简称 RDD)
RDD是一个不可变的分布式对象集合,一旦创建便不能修改。
每个RDD都可被分为多个分区,分布在不同的节点机器之上
转换:(Transformation):
转化操作会由一个 RDD 生成一个新的 RDD,从已有的RDD派生出新的RDD,Spark会使用谱系图来记录不同RDD之间的依赖关系。Spark需要用这些信息来按需计算每个RDD,也可以依赖谱系图在持久化的RDD丢失部分数据时恢复所丢失的数据。
行动(action):
行动操作会对 RDD 计算出一个结果,并把结果返回到驱动器程序中,或把结果存储到外部存储系统中
惰性计算:
当创建RDD或者从RDD派生RDD,spark都不会执行真正的计算,只有在第一次行动(action)执行时,才会执行真正的计算
Transformation:
map(func):把函数应用到RDD每一元素中,返回一个新的RDDfilter(func):过滤,返回一个只满足过滤条件的新的RDDflatMap(func):对每一个输入元素,输出多个输出元素 , flat压扁的意思,将RDD压扁后返回一个新的RDD集合:distinct():去重 rdd.distinct()union():并集 rdd1.union(rdd2)intersection() 交集 rdd1.intersection(rdd2)subtract() 相减 rdd1.subtract(rdd2)
action:
在RDD上计算出来的一个计算 把结果返回给Driver program或保存到文件系统上,count(),savereduce: 接受一个函数,作用作用在RDD两个类型相同的元素上,返回一个新元素 可以实现RDD重元素的累加,计数,和其他类型的聚集操作val sum = rdd.reduce((x,y)=>x+y)collect: 遍历整个RDD,向driver program返回RDD的内容 需要单机内存能够容纳的下的(因为数据要拷贝个driver,测试使用) 大数据时候,使用saveAsTextFile() action操作take(n): 返回RDD的n各元素(同时尝试访问最少的partitions) 返回结果是无序的,测试使用top: 排序(根据RDD中的比较器)foreach(): 计算 RDD中的每一个元素,但不返回本地(只是访问一遍数据) 可以配合println()友好打印数据
keyValue对RDDs:
transform:
example:{(1,2),(3,4),(3,5)}reduceByKey(func):把具有相同的key的vlaue结合 reudecByKey((x,y)=> x+y) =>{(1,2),(3,9)}groupByKey():把相同的key的values分组 rdd.groupByKey() => {(1,[2]),(3,[4,5]}mapValues(func):函数作用于pairRDD的每一个元素,key值不变 rdd.mapValues(x=>x+1) =>{(1,3),(3,5),(3,6)}flatMapValues(func):符号化的时候使用 rdd.flatMapValues(x=>(x to 4) => {(1,2),(1,3),(1,4),(3,4)}keys():返回keysvalues():放回valuessortByKey():按照key排序RDDcombineByKey(createCombiner,mergeValue,mergeCombiners,partitioner): 把相同key的结合,使用不同的返回类型最常用的基于key 的聚合函数,返回类型和输入类型可能不一样 许多基于key的聚合函数都用到了它,如groupByKey()combineByKey(): 遍历partition中的元素,元素的key,要么加过,要么没见过 如果是新元素,使用createCombiner() 如果是已经存在的key,使用mergeValue() 合计每个partiton的结果时使用mergeCombiners() 例子: val te = sc.parallelize(Array(("jack",80),("jack",90),("tom",80),("tom",30)))val t1 = te.combineByKey(score=>(1,scorce),(c1:(Int,Int),newScore)=>(c1._1+1,c1._2+newScore),(c1:(Int,Int),c2:(Int,Int))=>(c1._1+c2._1,c1._2+c2._2)) t1.map(case(name,(num,score)=>(name,score/num)//判断case是否为自己想要的类型
阅读全文
0 0
- RDDs基本操作Transformation和action
- Rdds基本操作Action
- spark的transformation和action算子(基本操作)
- RDDs基本操作
- Rdds基本操作Transformation,逐元素,map,filter,flatMap,集合运算
- spark RDD transformation和action操作
- Spark常用transformation和action操作
- Spark核心操作--Transformation和Action
- RDDs Action
- Spark:Transformation和Action
- Spark: Transformation和Action
- Spark: Transformation和Action
- Spark Transformation和Action
- Spark基础的transformation 和 action的函数操作
- Spark WordCount和Transformation Action Controller三种操作
- spark中的action和transformation
- spark中的action和transformation
- spark中的action和transformation
- 基于Matlab中FDATool工具箱的滤波器设计及相关文件的生成
- 关于CI-CodeIgniter目录访问权限的问题的解决方法,通过修改.htaccess文件的办法解决无法加载css文件,js文件,图片文件等类型文件的方法
- 循环队列
- synchronized和ReentrantLock的区别
- java 高并发程序设计-附录
- RDDs基本操作Transformation和action
- Matlab滤波器设计
- Leetcode 1 Two Sum
- Spring使用@Resource、@Autowired注入时出现空指针问题的原因
- 开始start
- 设置启动Eclipse的JDK版本
- Matlab运行ML课程作业
- dubbo和spring boot整合简约版(xml和annotation)
- Faster RCNN win版本