大数据--spark生态3--RDD介绍及其算子

本文详细介绍了Spark中的RDD(弹性分布式数据集)的创建,包括从文件系统和并行集合创建。接着探讨了RDD的操作,特别是转换和行动操作,以及它们的惰性机制和持久化。此外,文章深入讨论了各种转换算子,如map、flatMap、filter和reduceByKey,以及行动算子如reduce、collect和save。通过对RDD的深入理解,有助于提升Spark应用的性能和效率。

目录

一:RDD创建

1.1从文件系统中加载数据创建RDD

1.2通过并行集合(数组)创建RDD

二:RDD操作

2.1转换操作

2.2行动操作

2.3 惰性机制

2.4 持久化

三:rdd转换算子

3.1 value类型

3.2 key-value类型

四:rdd行动算子


一:RDD创建

1.1从文件系统中加载数据创建RDD

     采用textFile()方法,该方法把文件的url作为参数。这个url可以是:

  • 本地文件系统的地址
  • 分布式文件系统HDFS的地址

1.2通过并行集合(数组)创建RDD

    通过调用SparkContext的parallelize方法,在Driver中一个已经存在的集合(数组)上创建。

二:RDD操作

2.1转换操作

  • 对于RDD而言,每一次转换操作都会产生不同的RDD,供给下一个“转换”使用
  • 转换得到的RDD是惰性求值的,也就是说,整个转换过程只是记录了转换的轨迹,并不会发生真正的计算,只有遇到行动操作的时候,才会发生真正的计算,开始从血缘关系源头开始,进行物理的转换操作。
  • 常用的转换操作:

  • map()和flatMap()区别
  • groupByKey()和reduceByKey()的区别

2.2行动操作

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

2.3 惰性机制

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

2.4 持久化

  •  在Spark中,RDD采用惰性求值的机制,每次遇到行动操作,都会从头开始执行计算。每次调用行动操作,都会触发一次从头开始的计算。这对于迭代计算而言,代价很大,迭代计算经常需要多次重复使用同一组数据。
  • 可以通过持久化(缓存)机制避免这种重复开销
  • 可以使用persist()方法对一个RDD标记为持久化(并不会立即进行持久化,而是等到遇到第一个行动操作触发真正计算以后,才会把计算结果进行持久化)。
  • 持久化的RDD将会被保留在计算节点的内存中被后面的行动操作重复使用。

三:rdd转换算子

3.1 value类型

  • map

将处理的数据进行映射转换,这里的转换可以是类型的转换,也可以是值的转换。

  • mappartitions

将待处理的数据以分区为单位发送到计算节点进行处理,这里的处理是指可以进行任意的处理。

  • flatMap

将处理的数据进行扁平化后再进行映射处理,所以算子也称扁平映射。

  • glom

将同一个分区的数据直接转换为相同类型的内存数组进行处理,分区不变。

  • groupBy

将数据根据指定的规则进行分组,分区默认不变,但是数据会被打乱重新组合,我们将这样的操作成为shuffle。

  • filter

将数据根据指定规则进行筛选过滤,符合规则的数据保留,不符合规则的数据丢弃。当数据进行筛选过滤后,分区不变,但是分区内的数据可能不均衡,生产环境下,可能出现数据倾斜。

  • sample

根据指定的规则从数据中抽取数据。

  • distinct

将数据中重复的数据去重

  • coalesce

根据数据量缩减分区,用于大数据集过滤后,提高小数据集的执行效率

  • repartition

增加或者缩减分区。

  • sortBy

数据排序

  • intersection

对源rdd和参数rdd求交集后返回一个新的rdd

  • union

        对源rdd和参数rdd求并集后返回一个新的rdd

  • subtract 

        rdd求差集

  • zip

        将两个rdd中的元素,以键值对的形式进行合并。

3.2 key-value类型

  • partitionBy

        将数据按照指定partition重新进行分区。

  • reduceByKey

        可以将数据按照相同的key对value进行聚合。

  • groupbykey

        将数据根据keyv对value进行分组

补充:reducebykey和groupbykey区别?

        1)从shuffle角度,reducebykey和reducebykey都存在shuffle操作,但是reducebykey可以在shuffle前对分区内内相同的key的数据进行预聚合(combine)功能,这样会减少落盘的数据量,而groupbykey只是进行分组,不存在数据量减少的问题,reducebykey性能较高。

        2)从功能角度,reducebykey包含分区和聚合的功能,如果仅仅是分组而不需要聚合,那么还是使用groupbykey.

  • aggregateByKey

        将数据根据不同的规则进行分区内计算和分区间计算。当分区内计算规则相同时候,就可以简化为foldbykey

  • sortbykey

        按照key进行排序。

  • join

        在类型为(k,v)和(k,w)的rdd上调用,返回一个相同的key对应的所有元素连接在一起的(k,(v,w))的rdd。

  • leftouterjoin

        左外连接

  • cogroup

        在类型为(K,V)和(K,W)的 RDD 上调用,返回一个(K,(Iterable<V>,Iterable<W>))类型的 RDD

四:rdd行动算子

  • reduce

        聚合rdd中的所有元素,先聚合分区内数据,再聚合分区间数据

  • collect

        在驱动程序中,以数组array的形式返回数据集的所有元素。

  • count

        返回rdd中元素个数

  • first

        返回rdd中的第一个元素

  • take

        返回一个由rdd的前n个元素组成的数组

  • takeordered

        返回该rdd排序后前n个元素组成的数组。

  • aggregate

        分区的数据通过初始值和分区内的数据进行聚合,然后再和初始值进行分区间的数据聚合。同理,aggregate的特例是fold.

  • countbykey

        统计每种key的个数。

  • save

        将数据保存到不同格式的文件中。

  • foreach

        分布式遍历rd中的每一个元素。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值