添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
spark-RDD基础

spark-RDD基础

1 RDD

Spark 提供的主要抽象是弹性分布式数据集 (RDD),它是跨集群节点分区的元素集合,可以并行操作。

RDD主要内容:

  1. RDD的创建
  2. RDD的保存
  3. RDD的转换操作
  4. RDD的行动操作

2 RDD的创建和RDD的保存

3 RDD的转换操作

map(func): 将数据源的每个元素传递给函数 func ,func函数对每个元素处理后,返回一个的新分布式数据集。

filter(func): 将数据源的每个元素传递给函数func, func函数对每一个函数处理,要是返回 true ,则保留当前元素,最终将保留的数据形成新数据集返回。

flatMap(func): 与 map 类似,区别在于:多了一步flat(扁平化处理),通俗一点就是通过首先将函数应用于此 RDD 的所有元素,然后展平结果(去掉嵌套),返回一个新的 RDD。

mapPartitions(func): 与 map 类似,但是在 RDD 的每个分区(块)上单独运行map,因此在 T 类型的 RDD 上运行时,func 必须是 Iterator<T> => Iterator<U> 类型。

mapPartitionsWithIndex(func): 与 mapPartitions 类似,在其基础上增加了返回分区索引的功能,因此在 T 类型的 RDD 上运行时, func 必须是 (Int, Iterator<T>) => Iterator<U> 类型。

sample( withReplacement , fraction , seed ): 对RDD数据进行采样,使用给定的随机数生成器种子对数据进行采样。

union ( otherDataset ) 求取两个RDD中元素和参数的并集。

intersection ( otherDataset ) 求取两个RDD中元素和参数的交集。

distinct:([ numPartitions ])): 将数据中重复数据去重

groupByKey([ numPartitions ]): 在 (K, V) 对的数据集上调用时,返回 (K, Iterable<V>) 对的数据集,即将相同的key的value值放在一起,形成key-value1,value2...

注意: 如果您分组是为了对每个键执行聚合(例如求和或平均值),使用 reduceByKey 或aggregateByKey 会产生更好的性能。

注意: 默认情况下,输出中的并行级别取决于父 RDD 的分区数。 您可以传递一个可选的 numPartitions 参数来设置不同数量的任务。

reduceByKey ( func , [ numPartitions ]) 按照相同的key,对value进行聚合(求和),

当在 (K, V) 对的数据集上调用时,返回 (K, V) 对的数据集,其中每个键的值使用给定的 reduce 函数 func 聚合。

aggregateByKey ( zeroValue )( seqOp , combOp , [ numPartitions ])

功能:根据设定规则同时进行分区间的计算和分区内的计算,具体为,(1)在分区内按照相同的key进行某种计算,分区内部计算完后,接着计算分区间的(2)同样依据相同的key按照规则进行计算。

foldByKey函数: 是aggregateByKey函数的特殊形式,即简写形式。

sortByKey ([ ascending ], [ numPartitions ]) 用于对RDD进行排序。

join ( otherDataset , [ numPartitions ]) 通俗来讲就是拼接两个RDD,例如将两个同样是键值对类型的RDD,按照相同的key,连接在一起.如(K,V),(K<W)=>(k,(V,W))。

leftOuterJoin、rightOuterJoin 和 fullOuterJoin 和Join的功能类似。

cogroup: 将两个RDD中键值对的形式元素,按照相同的key,连接而成,只是将两个在类型为(K,V)和(K,W)的 RDD ,返回一个(K,(Iterable<V>,Iterable<W>))类型的 RDD 。

coalesce: 功能:改变原始数据的分区,减少分区数量。

coalesce方法默认情况下不会将分区的数据打乱重新组合。

repartition: 根据数据量扩大分区,其在底层调用了coalesce函数,其中coalesce函数的shuffle参数默认为true。

combineByKey函数 :功能:根据设定规则同时进行分区间的计算和分区内的计算,

combineByKey函数和aggregateByKey函数的功能很像。

partitionBy: 功能按照指定的方式进行分区。

zip函数: 将两个RDD以键值对的形式组织在一起,其键值对中的key为第一个RDD中的元素,Value 为第 2 个 RDD 中的相同位置的元素。


cartesian( otherDataset ): 返回 RDD1和 RDD2的笛卡尔积,即返回RDD的元素为 (a, b) ,其中 a 是来自RDD1的元素,b 是RDD2的元素。

将 RDD 中的分区数减少到 numPartitions。 在过滤大型数据集后更有效地运行操作很有用。

pipe( command , [envVars] ): 通过 shell 命令管道 RDD 的每个分区,例如 Perl 或 bash 脚本。 RDD 元素被写入进程的标准输入,输出到标准输出的行作为字符串的 RDD 返回。

repartitionAndSortWithinPartitions( partitioner ): 根据给定的分区器对 RDD 进行重新分区, 并在每个结果分区内,按键对记录进行排序 。 这比调用 repartition 然后在每个分区内排序更有效,因为它可以将排序推到 shuffle 机器中。

该算子可以一边进行重分区的shuffle操作,一边进行排序。shuffle与sort两个操作同时进行,比先shuffle再sort来说,性能可能是要高的。

4 RDD的行动算子

  1. reduce:聚集 RDD 中的所有元素,先聚合分区内数据,再聚合分区间数据
  2. collect:数组 Array 的形式返回数据集的所有元素,具体为将不同分区的数据按照分区顺序采集到Driver端内存中,形成数组。
  3. count:计算RDD中元素的个数。
  4. first:返回RDD中的第一个元素
  5. take:返回RDD 的前 n 个元素组成的数组。
  6. takeSample:返回一个数组,其中包含数据集的 num 个元素的随机样本,有或没有替换,可选择预先指定随机数生成器种子。
  7. takeOrdered:先对 RDD 排序,然后返回前 n 个元素组成的数组
  8. saveAsTextFile:将数据保存到不同格式的文件中。
  9. foreach:分布式遍历 RDD 中的每一个元素。和print函数一起使用。

发布于 2021-08-12 14:03