SPARK,RDD,RDD算子

spark 技术栈

Spark Core 核心组件,分布式计算引擎
Spark SQL 高性能的基于hadoop的SQL解决方案
Spark Streaming 实时流处理
Spark GraphX 分布式图处理框架
Spark MLlib 分布式机器学习

RDD(Resilient Distributed Datasets)

弹性分布式数据集
RDD不存储真正的数据,知识对数据和操作的描述
RDD默认放在内存中,当内存不足时,自动写入磁盘

特性

一系列的分区(分片)信息,每个任务处理一个分区
每个分区上都有compute函数,计算该分区中的数据
RDD之间有一系列的依赖
分区器决定数据(key-value)分配至哪个分区
优先位置列表,将计算任务分派到其所在处理数据块的存储位置
SPARK,RDD,RDD算子

转换算子

对于转换操作,RDD 的所有转换都不会直接计算结果。Spark 仅记录作用于RDD 上的转换操作逻辑,当遇到动作算子(Action)时才会进行真正计算。map(func) 通过函数 func 作用于源 RDD 中的每个元素,返回一个新的 RDD

filter(func)

选择源 RDD 中的使得函数 func 为 true 的元素,返回一个新的 RDD

flatMap(func)

与 map 类似,但是每个输入项可以映射到 0 或多个输出项(因此 func 应该返回一个 Seq,而不是单个项)。

mapPartitions(func)

与 map 类似,但是在 RDD 的每个分区上单独运行,所以 func 在类型为 T 的 RDD 上运行时,必须是类
型 Iterator => Iterator ,要注意内存溢出

mapPartitionsWithIndex(func)

与 mapPartitions 类似,但为 func 多提供一个分区编号 ,所以 func 类型为:
(Int, Iterator) => Iterator

sample(withReplacement, fraction, seed)

使用给定的随机数生成器种子对数据的一部分进行采样。

union(otherDataset)

返回一个新数据集,该数据集包含源数据集中的元素和参数的并集

intersection(otherDataset)

返回一个新的 RDD,其中包含源数据集中的元素和参数的交集。

distinct([numPartitions]))

去重,返回包含源数据集的不同元素的新数据集。

groupByKey([numPartitions])

当调用一个(K, V)对的数据集时,返回一个(K,Iterable)对的数据集。

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

seqOp 操作会聚合各分区中的元素,然后 combOp操作把所有分区的聚合结果再次聚合,两个操作的初始值都是zeroValue. seqOp的操作是遍历分区中的所有元素(T),第一个 T 跟 zeroValue 做操作,结果再作为与第二个 T 做操作的 zeroValue,直到遍历完整个分区。combOp 操作是把各分区聚合的结果,再聚合。

sortByKey([ascending], [numPartitions])

根据 key 进行排序,默认为升序。ascending: Boolean = true

join(otherDataset, [numPartitions])

当在类型(K, V)和(K, W)的数据集上调用时,返回一个(K, (V, W))对的数据集,其中包含每个键的所有
对元素。外部连接由 leftOuterJoin、rightOuterJoin和 fullOuterJoin 支持。

cogroup(otherDataset, [numPartitions])

当调用类型(K, V)和(K, W)的数据集时,返回一个(K,(Iterable,Iterable))元组的数据集。这个操作也称为groupWith。

cartesian(otherDataset)

在类型为 T 和 U 的数据集上调用时,返回一个(T, U)对(所有对元素)的数据集。

pipe(command, [envVars])

通过 shell 命令(例如 Perl 或 bash 脚本)对 RDD 的每个分区进行管道传输。将 RDD 元素写入进程的stdin,并将其输出到 stdout 的行作为字符串 RDD返回。

coalesce(numPartitions)

将 RDD 中的分区数量减少到 numpartition。

repartition(numPartitions)

随机地重新 Shuffle RDD 中的数据,以创建更多或更少的分区,并在它们之间进行平衡。

持久化算子

持久化算子包括:cache、persist 及 checkpoint。

Action 算子

reduce(func)

使用函数 func(它接受两个参数并返回一个)聚合数据集的元素。

collect()

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

count()

返回数据集中元素的数量。

lookup(k)

用于PairRDD,返回K对应的所有V值

first()

返回数据集的第一个元素(类似于 take(1))。

take(n)

返回一个包含数据集前 n 个元素的数组。

takeSample(withReplacement, num, [seed])

返回一个数组,其中包含数据集的随机 num 个元素样本,可以替换,也可以不替换,可以预先指定随机数生成器种子。

takeOrdered(n, [ordering])

使用RDD的自然顺序或自定义比较器返回RDD的前 n 个元素(升序)。

saveAsTextFile(path)

将数据集的元素作为文本文件(或文本文件集)写入本地文件系统、HDFS 或任何其他 hadoop 支持的文件系统的给定目录中。Spark 将对每个元素调用 toString,将其转换为文件中的一行文本。

saveAsSequenceFile(path)

将数据集的元素作为 Hadoop SequenceFile 写入本地文件系统、HDFS 或任何其他 Hadoop 支持的文件系统的给定路径中。这在实现 Hadoop 的可写接口的键值对的 RDDs 上是可用的。在 Scala 中,它也可用于隐式转换为可写的类型(Spark 包括对Int、Double、String 等基本类型的转换)。

saveAsObjectFile(path)

使用 Java 序列化以简单的格式编写数据集的元素,然后可以使用 SparkContext.objectFile()加载这
些元素。

countByKey()

仅在类型(K, V)的 RDDs 上可用。返回(K, Int)对的Map 表示每个键的计数。

foreach(func)

对数据集的每个元素运行函数 func,无返回值