RDD(弹性分布数据集)是一个容错的、只读的、可进行并行操作的数据结构,是一个分布在集群备个节点的存放元素的集合。RDD有3种不同的创建方法。一种是对程序中存在的基本数据结构中的集合进行并行化(如Set、List、Array),另一种是通过已有RDD转化得到新的RDD,这两种都是通过内存已有集合创建RDD。还有一种是直接读取外部存储的数据集。

从内存已有数据创建RDD

从内存已有数据创建RDD方法有二,一为转化Seq集合为RDD,二为从已有RDD转化成新的RDD。

  • parallelize(seq,n)。有两个参数,第一个参数为要转化的集合,必须是seq(序列,从0开始计数的有固定索引位置的可迭代访问对象)集合。第二个参数为分区数,默认为该application分配到的资源的CPU数。
    Spark编程简易版笔记
  • makeRDD。有两种实现方法。一种和parallellize完全一致,另外一种描述如下:Spark编程简易版笔记
    Spark编程简易版笔记

从外部存储创建RDD

这种创建RDD的方式才是实践中常用的。
通过sparkcontext对象的textfile方法读取数据集,支持多种类型数据集,如目录,文本文件,压缩文件和通配符匹配的文件等,且设定分区数。
从HDFS文件创建:
Spark编程简易版笔记
从Linux本地文件创建:(路径前加上"file://")Spark编程简易版笔记

RDD的操作方法

分两类,一是转换操作(transformations),二是行动操作(actions)。
转换操作通过某种函数将一个RDD转换为一个新的RDD(转换操作同时也是创建RDD的第二种方法)。转换操作是懒操作,不会立刻执行。
行动操作用于出发转换操作。
map
map是转换操作,将RDD中每个元素通过某种函数进行转换并返回新的RDD。
Spark编程简易版笔记
sortBy()
对RDD进行排序,参数有三。
Spark编程简易版笔记
第一个参数是必须输入的。
collect
是一个行动操作,适用于小数据(否则给网络造成较大压力,且内存溢出)处理后的返回。
Spark编程简易版笔记
还有另一种用法,因不常用略。
flatMap
顾名思义,先进行map操作再flat,通常用于切分单词。
Spark编程简易版笔记
take(N)
获取RDD前N个元素。和collect原理类似,只是collect用于获取全部数据,take可以获取指定个数数据。
Spark编程简易版笔记
union()
一种转换操作。顾名思义,将两个RDD(每个元素的值的个数和类型需一致)合并成一个。值得注意的是,它不进行去重操作,可手动调用distinct()方法去重。
Spark编程简易版笔记
filter()
一种转换操作,顾名思义,过滤。
需一个参数,参数是一个用于过滤的函数,返回值为Boolean类型,值为true保留,否则过滤掉。
Spark编程简易版笔记
上图第一个filter中的"_._2"的第一个_和第二个filter的x一样,都表示RDD的一个元素。

distinct()
去重。Spark编程简易版笔记
intersection()
求两个RDD的交集(共同元素)。rdd1.intersection(rdd2)和rdd2.intersection(rdd1)的结果是一样的。
subtract()
参数是一个RDD,rdd1.subtract(rdd2),用于将前一个RDD中在后一个RDD出现的元素删除,可看作求rdd2在全集rdd1下的补集。
Spark编程简易版笔记
cartesian()
笛卡尔积。
Spark编程简易版笔记

键值对RDD

虽然大部分Spark的RDD操作都支持所有种类的单值RDD,但是有少部分特殊的操作只能作用于键值对类型的RDD。顾名思义,键值对RDD由一组组的键值对组成,这些RDD被称为PairRDD。PairRDD提供了并行操作各个键或跨节点重新进行数据分组的操作接口。例如,PairRDD提供了reduceByKey()方法,可以分别规约每个键对应的数据,还有join()方法,可以把两个RDD中键相同的元素组合在一起,合并为一个RDD。

创建键值对RDD
Spark编程简易版笔记
keys和values
转换操作。keys返回一个仅包含键的RDD,values 返回一个仅包含值的RDD。
Spark编程简易版笔记
reduceByKey()
转换操作。合并具有相同键的值。
Spark编程简易版笔记
Spark编程简易版笔记
groupByKey()
转换操作。对具有相同键的值分组,常用雨对每个组的数据个数计数、统计。
Spark编程简易版笔记

join()
连接两个RDD,可以把两个RDD键相同的元素组合在一起。分为内连接,左外连接,右外连接,全外连接。
Spark编程简易版笔记
Spark编程简易版笔记
Spark编程简易版笔记
Spark编程简易版笔记
Spark编程简易版笔记
zip()
将两个RDD组合成键值对形式的RDD。这两个RDD的分区数和元素数应相同。
Spark编程简易版笔记
combineByKey()
合并相同键的值,允许返回类型与输入类型不同的返回值。是一个比较核心的高级函数。
这个函数的使用有些难理解。
定义:combineByKey (createCombiner, mergeValue , mergeCombiners, numPartitions=None)
Spark编程简易版笔记
Spark编程简易版笔记
lookup(key)
查找指定key的所有的value。
Spark编程简易版笔记

本文参考资料:Spark大数据技术与应用 肖芳,张良均 主编

相关文章:

  • 2021-07-12
  • 2021-09-18
  • 2021-05-09
  • 2022-12-23
  • 2021-12-05
  • 2021-12-15
  • 2021-07-04
  • 2021-12-04
猜你喜欢
  • 2021-04-16
  • 2022-12-23
  • 2021-12-10
  • 2021-11-22
  • 2021-10-29
  • 2022-01-12
  • 2021-12-21
相关资源
相似解决方案