计算机系统应用教程网站

网站首页 > 技术文章 正文

Spark之RDD算子-转换算子 sparkstreaming算子

btikc 2024-10-12 11:41:01 技术文章 10 ℃ 0 评论

RDD算子

转换(Transformation)算子就是对RDD进行操作的接口函数,其作用是将一个或多个RDD变换成新的RDD。

使用Spark进行数据计算,在利用创建算子生成RDD后,数据处理的算法设计和程序编写的最关键部分,就是利用变换算子对原始数据产生的RDD进行一步一步的变换,最终得到期望的计算结果。

对于变换算子可理解为分两类:

  • 1,对Value型RDD进行变换的算子;

  • 2,对Key/Value型RDD进行变换算子。

在每个变换中有仅对一个RDD进行变换的,也有是对两个RDD进行变换的。

对单个Value型的RDD进行变换

  • map

  • filter

  • distinct

  • flatMap

  • sample

  • union

  • intersection

  • groupByKey

上面列出的几个RDD变换在之前文章已有分享过,在这就不重复。下面主要是对先前没有分享的RDD算子笔记。Spark系列之RDD操作(一)

coalesce——重新分区

将当前RDD进行重新分区,生成一个以numPartitions参数指定的分区数存储的新RDD。参数shuffle为true时在变换过程中进行shuffle操作,否则不进行shuffle。

def coalesce(numPartitions: Int, shuffle: Boolean = false, partitionCoalescer: Option[PartitionCoalescer] = Option.empty)(implicit ord: Ordering[T] = null): RDD[T]

coalesce-RDD

coalesce

pipe——调用Shell命令

# Return an RDD created by piping elements to a forked external process.
def pipe(command: String): RDD[String]

在Linux系统中,有许多对数据进行处理的shell命令,我们可能通过pipe变换将一些shell命令用于Spark中生成新的RDD。

pipe-RDD

pipe

sortBy——排序

对原RDD中的元素按照函数f指定的规则进行排序,并可通过ascending参数进行升序或降序设置,排序后的结果生成新的RDD,新的RDD的分区数量可以由参数numPartitions指定,默认与原RDD相同的分区数。

# Return this RDD sorted by the given key function.

sortBy-RDD

对两个Value型RDD进行变换

cartesian——笛卡尔积

输入参数为另一个RDD,返回两个RDD中所有元素的笛卡尔积。

def cartesian[U](other: RDD[U])(implicit arg0: ClassTag[U]): RDD[(T, U)]

cartesian-RDD

subtract——补集

输入参数为另一个RDD,返回原始RDD与输入参数RDD的补集,即生成由原始RDD中而不在输入参数RDD中的元素构成新的RDD,参数numPartitions指定新RDD分区数。

#Return an RDD with the elements from this that are not in other.
def subtract(other: RDD[T], numPartitions: Int): RDD[T]

subtract-RDD

subtract

union——并集

返回原始RDD与另一个RDD的并集。

# Return the union of this RDD and another one.
def union(other: RDD[T]): RDD[T]
def ++(other: RDD[T]): RDD[T]

union-RDD

zip——联结

生成由原始RDD的值为Key,另一个RDD的值为Value依次配对构成的所有Key/Value对,并返回这些Key/Value对集合构成的新RDD

zip-RDD

对Key/Value型RDD进行变换

对单个Key-Value型RDD进行变换

combineByKey——按Key聚合

def combineByKey[C](createCombiner: (V) => C, mergeValue: (C, V) => C, mergeCombiners: (C, C) => C): RDD[(K,

combineByKey-RDD

flatMapValues——对所有Value进行flatMap

def flatMapValues[U](f: (V) =>TraversableOnce[U]): RDD[(K, U)]

flatMapValues-RDD

keys——提取Key

将Key/Value型RDD中的元素的Key提取出来,所有Key值构成一个序列形成新的RDD。

# Return an RDD with the keys of each tuple.
def keys: RDD[K]

keys-RDD

mapValues——对Value值进行变换

将Key/Value型RDD中的元素的Value值使用输入参数函数f进行变换构成一个新的RDD。

# Pass each value in the key-value pair RDD through a map function without changing the keys; 
# this also retains the original RDD's partitioning.
def mapValues[U](f: (V) => U): RDD[(K, U)]

mapValues-RDD

partitionBy——按Key值重新分区

def partitionBy(partitioner: Partitioner): RDD[(K, V)]
#Return a copy of the RDD partitioned using the specified partitioner.

partitionBy-RDD

reduceByKey——按Key值进行Reduce操作

def reduceByKey(func: (V, V) => V): RDD[(K, V)]
  • sortByKey——按Key值排序

  • values——取得value值构成新的RDD

对两个Key-Value型RDD进行变换

  • cogroup——按Key值聚合

  • join——按Key值联结

  • leftOuterJoin——按Key值进行左外联结

  • rightOuterJoin——按Key值进行右外联结

  • subtractByKey——按Key值求补

spark

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表