栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

RDD编程

RDD编程

RDD编程 一、RDD编程基础

1、RDD创建

Spark采用textFile()方法从文件系统中加载数据创建RDD,该方法把文件的URI作为参数,这个URI可以是本地文件系统的地址、分布式文件系统HDFS的地址或者是AmazonS3地址等。

(1)从文件系统中加载数据


(2)从分布式文件系统HDFS中加载数据

(3)通过并行集合(列表)创建RDD

2.RDD操作

RDD操作包含两种类型,即转换(Transformation)操作和行动(Action)操作

(1)转换操作

操作含义
filter(func)筛选出满足函数func的元素,并返回一个新的数据集
map(func)将每个元素传递到函数func中,并将结果返回为一个新的数据集
flatMap(func)与map()相识,但每个输入元素都可以映射到0或多个输出结果
groupByKey()应用于(K,V)键值对的数据集时,返回一个新的(K,Iterable)形式的数据集
reduceByKey(func)应用于(K,V)键值对的数据集时,返回一个新的(K,K)形式的数据集,其中每个值是将每个key传递到函数func中进行聚合后的结果

例:

  • filter()

  • map()

  • flatMap()

    "flat"是一个很形象的动作-----“拍扁”,也就是把wordArray中的每个RDD元素都“拍扁”成多个元素,所有这些被拍扁以后得到的元素,构成一个新的RDD。

  • groupByKey()

  • reduceByKey()

    (2)行动操作

    行动操作是真正触发计算的地方。Spark程序只有执行到行动操作时,才会执行真正的计算,从文件中加载数据,完成一次又一次转换操作,最终,完成行动操作得到结果。

    操作含义
    count()返回数据集中的元素个数
    collect()以数组的形式返回数据集中的所有元素
    first()返回数据集中的第1个元素
    take(n)以数组的形式返回数据集中的前n个元素
    reduce(func)通过函数func(输入两个参数并返回一个值)聚合数据集中的元素
    foreach(func)将数据集中的每个元素传递到函数func中运行

    3.惰性机制

    惰性机制是指整个转换过程只是记录了转换的轨迹,并不会发生真正的计算,只有遇到行动操作时,才会触发“从头到尾”的真正计算。

    4.持久化

    我们知道RDD采用惰性机制,这对于迭代计算而言,代价是很大的,因为迭代计算经常需要多次重复使用同一组数据。

    为了解决这一问题,我们可以通过持久化(缓存)机制来避免这种重复计算的开销。具体方法是使用persist()方法将一个RDD标记为持久化。

    一般而言,使用cache()方法时,会调用persist()。
    持久化RDD会占用内存空间,当不再需要一个RDD时,就可以使用unpersist()方法手动地把持久化的RDD从缓存中移除,释放内存空间。

    很明显时间缩短了很多。

    5.分区

    (1)分区的作用

    RDD是弹性分布式数据集,通常RDD很大,会被分成很多个分区,分别保存在不同的节点上。

    对RDD进行分区,第一个作用是增加并行度。

    如:rdd2的3个分区p6、p7、p8,分布在3个不同的工作节点WorkerNode2、WorkerNode3、WorkerNode4上,就可以在这三个工作节点分别启动3个线程对这3个分区的数据进行并行处理,增加任务的并行度。

    第二个作用是减少通信开销。

    (2)分区的原则

    RDD分区的一个原则是时得分区的个数尽量等于集群中CPU核心(Core)数目。对于不同的Spark部署模式,都可以通过设置spark.default.parallelism这个参数的值,来配置默认的分区数目。

    设置分区的个数

    创建RDD时手动指定分区个数

    sc.textFile(path,partitionNum)
    #path参数用于指定加载的文件的地址,partitionNum参数用于指定分区个数
    

    使用repartition方法重新设置分区个数

    自定义分区方法

    Spark提供了自带的HashPartition(哈希分区)与RangePartition(区域分区),能够满足大多数应用场景的需求。

    二、键值对RDD

    键值对RDD是指每个RDD元素都是(Key,Values)键值对类型,是一种常见的RDD类型,可以应用于很多场景。

    1.键值对RDD的创建

    键值对RDD的创建主要有两种方式:从文件中加载生成RDD;通过并行集合(列表)创建RDD。

    这和上面RDD创建类似,就是我们要对每个key值赋一个values。

    例:

    2.常用的键值对转换操作

    reduceByKey()和groupByKey()上面已经介绍过,接下来介绍:

    keys、values、sortByKey()、sortBy()、mapValues(func)、join()等

  • keys

    键值对RDD每个元素都是(Key,Values)的形式,keys方法啊只会把键值对RDD中的key返回,形成一个新的RDD。

  • values

    values操作只会把键值对RDD中的values返回,形成一个新的RDD。

  • sortByKey()

    sortByKey()的功能是返回一个根据key排序的RDD。

  • sortBy()

    可以根据其他字段进行排序。

  • mapValues(func)

    mapValues(func)对键值对RDD中每个value都应用一个函数,但是,key不会发生变化。

  • join()

    join表示内连接,对于给定的两个输入数据集(K,V1),(K,V2),只有在两个数据集中都存在的key才会被输出,最终得到一个(K,(V1,V2))类型的数据集。

  • 转载请注明:文章转载自 www.mshxw.com
    本文地址:https://www.mshxw.com/it/774492.html
    我们一直用心在做
    关于我们 文章归档 网站地图 联系我们

    版权所有 (c)2021-2022 MSHXW.COM

    ICP备案号:晋ICP备2021003244-6号