RDD的中文解释是弹性分布式数据集。
构造的数据集的时候用的是List(链表)或者Array数组类型
/* 使用makeRDD创建RDD */
/* List */
val rdd01 = sc.makeRDD(List(,,,,,))
val r01 = rdd01.map { x => x * x }
println(r01.collect().mkString(","))
/* Array */
val rdd02 = sc.makeRDD(Array(,,,,,))
val r02 = rdd02.filter { x => x < }
println(r02.collect().mkString(",")) val rdd03 = sc.parallelize(List(,,,,,), )
val r03 = rdd03.map { x => x + }
println(r03.collect().mkString(","))
/* Array */
val rdd04 = sc.parallelize(List(,,,,,), )
val r04 = rdd04.filter { x => x > }
println(r04.collect().mkString(","))

也可以直接用文件系统来构造

 val rdd:RDD[String] = sc.textFile("file:///D:/sparkdata.txt", 1)
val r:RDD[String] = rdd.flatMap { x => x.split(",") }
println(r.collect().mkString(","))

RDD的操作分为转化操作(transformation)和行为操作(action),

转化操作和行为操作的本质区别

转化操作使一个RDD转化为另一个RDD而行动操作就是进行实际的计算

 val rddInt:RDD[Int] = sc.makeRDD(List(1,2,3,4,5,6,2,5,1))
val rddStr:RDD[String] = sc.parallelize(Array("a","b","c","d","b","a"), 1)
val rddFile:RDD[String] = sc.textFile(path, 1) val rdd01:RDD[Int] = sc.makeRDD(List(1,3,5,3))
val rdd02:RDD[Int] = sc.makeRDD(List(2,4,5,1)) /* map操作 */参数是函数,函数应用于RDD每一个元素,返回值是新的RDD
println("======map操作======")
println(rddInt.map(x => x + 1).collect().mkString(","))
println("======map操作======")
/* filter操作 */参数是函数,函数会过滤掉不符合条件的元素,返回值是新的RDD
println("======filter操作======")
println(rddInt.filter(x => x > 4).collect().mkString(","))
println("======filter操作======")
/* flatMap操作 */参数是函数,函数应用于RDD每一个元素,将元素数据进行拆分,变成迭代器,返回值是新的RDD
println("======flatMap操作======")
println(rddFile.flatMap { x => x.split(",") }.first())
println("======flatMap操作======")
/* distinct去重操作 */没有参数,将RDD里的元素进行去重操作方法转换操作生成一个只包含不同元素的一个新的RDD。开销很大。 
println("======distinct去重======")
println(rddInt.distinct().collect().mkString(","))
println(rddStr.distinct().collect().mkString(","))
println("======distinct去重======")
/* union操作 */会返回一个包含两个RDD中所有元素的RDD,包含重复数据。
println("======union操作======")
println(rdd01.union(rdd02).collect().mkString(","))
println("======union操作======")
/* intersection操作 */只返回两个RDD中都有的元素。可能会去掉所有的重复元素。通过网络混洗来发现共有元素
println("======intersection操作======")
println(rdd01.intersection(rdd02).collect().mkString(","))
println("======intersection操作======")
/* subtract操作 */返回只存在第一个RDD中而不存在第二个RDD中的所有的元素组成的RDD。也需要网络混洗
println("======subtract操作======")
println(rdd01.subtract(rdd02).collect().mkString(","))
println("======subtract操作======")
/* cartesian操作 */计算两个RDD的笛卡尔积,转化操作会返回所有可能的(a,b)对,其中a是源RDD中的元素,而b则来自于另一个RDD。 
println("======cartesian操作======")
println(rdd01.cartesian(rdd02).collect().mkString(","))
println("======cartesian操作======")

以下是行动操作代码

 val rddInt:RDD[Int] = sc.makeRDD(List(1,2,3,4,5,6,2,5,1))
val rddStr:RDD[String] = sc.parallelize(Array("a","b","c","d","b","a"), 1) /* count操作 */返回RDD所有元素的个数
println("======count操作======")
println(rddInt.count())
println("======count操作======")
/* countByValue操作 */各元素在RDD中出现次数
println("======countByValue操作======")
println(rddInt.countByValue())
println("======countByValue操作======")
/* reduce操作 */并行整合所有RDD数据,例如求和操作
println("======reduce操作======")
println(rddInt.reduce((x ,y) => x + y))
println("======reduce操作======")
/* fold操作 */和reduce功能一样,不过fold带有初始值
println("======fold操作======")
println(rddInt.fold(0)((x ,y) => x + y))
println("======fold操作======")
/* aggregate操作 */和reduce功能一样,不过fold带有初始值
println("======aggregate操作======")
val res:(Int,Int) = rddInt.aggregate((0,0))((x,y) => (x._1 + x._2,y),(x,y) => (x._1 + x._2,y._1 + y._2))
println(res._1 + "," + res._2)
println("======aggregate操作======")
/* foeach操作 */对RDD每个元素都是使用特定函数就是遍历
println("======foeach操作======")
println(rddStr.foreach { x => println(x) })
println("======foeach操作======")
.mapValues(x=>(x,1)).//mapValues是对值的操作,不操作key使数据变成(Tom,(26,1))

map()指的是对key进行操作

mapValues()指的是对Values进行操作

first()返回的是dataset中的第一个元素

take(n)返回前n个elements,这个是driverprogram返回的

takeSample(withReplacementnum,seed)抽样返回一个dataset中的num个元素,随机种子seed

saveAsTextFile(path)把dataset写到一个textfile中,或者HDFS支持的文件系统中,spark把每条记录都转换为一行记录,然后写到file中

saveAsTextFile(path)只能用在key-value对上,然后生成SequenceFile写到本地或者hadoop文件系统

saveAsObjectFile(path)把dataset写到一个java序列化的文件中,用sparkContext,objectFile()装载

countByKey()返回的是key对应的个数的一个map.,作用与一个RDD

参考https://www.cnblogs.com/sharpxiajun/p/5506822.html加上自己的理解

transformation和action的主要区别


接口定义方式不同

1.Transformation:RDD[X]->RDD[Y]

2.Action:RDD[X]->Z(Z不是一个RDD,可能是基本类型,数组等)

执行方式也不同

Transformation只会记录RDD转化关系,并不会产生计算(惰性执行,LazyExecution)

Action是触发程序执行(分布式)的算子

RDD弹性分布式数据集的基本操作的更多相关文章

  1. RDD(弹性分布式数据集)及常用算子

    RDD(弹性分布式数据集)及常用算子 RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是 Spark 中最基本的数据 处理模型.代码中是一个抽象类,它代表一个 ...

  2. 2. RDD(弹性分布式数据集Resilient Distributed dataset)

    *以下内容由<Spark快速大数据分析>整理所得. 读书笔记的第二部分是讲RDD.RDD 其实就是分布式的元素集合.在 Spark 中,对数据的所有操作不外乎创建RDD.转化已有RDD以及 ...

  3. spark系列-2、Spark 核心数据结构:弹性分布式数据集 RDD

    一.RDD(弹性分布式数据集) RDD 是 Spark 最核心的数据结构,RDD(Resilient Distributed Dataset)全称为弹性分布式数据集,是 Spark 对数据的核心抽象, ...

  4. Spark - RDD(弹性分布式数据集)

    org.apache.spark.rddRDDabstract class RDD[T] extends Serializable with Logging A Resilient Distribut ...

  5. Spark核心类:弹性分布式数据集RDD及其转换和操作pyspark.RDD

    http://blog.csdn.net/pipisorry/article/details/53257188 弹性分布式数据集RDD(Resilient Distributed Dataset) 术 ...

  6. Spark的核心RDD(Resilient Distributed Datasets弹性分布式数据集)

    Spark的核心RDD (Resilient Distributed Datasets弹性分布式数据集)  原文链接:http://www.cnblogs.com/yjd_hycf_space/p/7 ...

  7. RDD内存迭代原理(Resilient Distributed Datasets)---弹性分布式数据集

    Spark的核心RDD Resilient Distributed Datasets(弹性分布式数据集)   Spark运行原理与RDD理论 Spark与MapReduce对比,MapReduce的计 ...

  8. Spark弹性分布式数据集RDD

    RDD(Resilient Distributed Dataset)是Spark的最基本抽象,是对分布式内存的抽象使用,实现了以操作本地集合的方式来操作分布式数据集的抽象实现.RDD是Spark最核心 ...

  9. 【Spark】Spark核心之弹性分布式数据集RDD

    1. RDD概述 1.1 什么是RDD (1) RDD(Resilient Distributed Dataset)弹性分布式数据集,它是Spark的基本数据抽象,它代表一个不可变.可分区.里面的元素 ...

随机推荐

  1. python基础篇_003_函数

    python中的函数 1.函数的目的 .避免代码冗余 .增强可读性 2.函数的定义与调用 # 定义函数 使用关键字def """ 1.定义函数: def 函数名(): 函 ...

  2. Springboot中使用Scheduled做定时任务

    在开发中,定时任务是常见的功能,在spring boot 下开发定时任务其实很简单,具体代码如下: 1.配置依赖包pom.xml 由于默认的maven仓库经常访问不了,这里采用了阿里云的maven仓库 ...

  3. luo3372线段树模板的分块做法

    题目大意 请你维护一个有n个元素的整数序列,要求支持区间查询&区间修改 对于100%的数据,\(1<=n<=10^5\) 分析 正常做法是线段树维护区间修改.区间查询,今天我要讲的 ...

  4. Node.js_express_route 路由

    route 路由   (kiss my ass ヾ(゚∀゚ゞ) 请求方式        get / post /  put / delete____查 / 增 / 改 / 删 路由路径         ...

  5. 一般处理程序(ashx)的使用

    ASP.NET 中发送请求的页面代码如下: <head runat="server"> <title></title> <script s ...

  6. SQL - 1.区分login、user、schema和role

        Login Login 是Server一级的概念,表示登录Server的凭证,比如在Server_A上有一个数据库DA,那么想要访问数据库DA,第一步要做的事情就是先登录到Hosting该数据 ...

  7. java基础 第六章课后习题

    1.说明循环结构中break语句和continue语句的区别. 在循环结构中 break语句 是结束程序运行. continue语句是结束本句程序  不是结束程序. 2.使用for循环结构实现,从键盘 ...

  8. Java+面向对象初学感想

    在先导课之前我未曾接触C和Python之外的语言,在大一学年的课程中,用面向过程的思想方法足以完成绝大多数课程要求,故而我也对面向对象的编程思想知之甚少,虽然多有耳闻但是对它一直没有一个正式的学习了解 ...

  9. java_基础_类加载

    类加载:Java命令的作用是启动虚拟机,虚拟机通过输入流,从磁盘上将字节码文件(.class文件)中的内容读入虚拟机,并保存起来的过程就是类加载. 类加载特性 :      *在虚拟机的生命周期中一个 ...

  10. Python 学习笔记4 变量-字符串

    Python中的字符串,我们可以简单的认为是一组用单引号,双引号,三引号包含的一组字符,数字或者特殊字符.在Python3中,所有的字符串都是Unicode字符串. 变量定义 #单引号 string1 ...