一、什么是 RDD
RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是 Spark 中最基本的数据处理模型。代码中是一个抽象类,它代表一个弹性的、不可变、可分区、里面的元素可并行计算的集合。
➢ 弹性
⚫ 存储的弹性:内存与磁盘的自动切换
⚫ 容错的弹性:数据丢失可以自动恢复
⚫ 计算的弹性:计算出错重试机制
⚫ 分片的弹性:可根据需要重新分片。
➢ 分布式:数据存储在大数据集群不同节点上
➢ 数据集:RDD 封装了计算逻辑,并不保存数据
➢ 数据抽象:RDD 是一个抽象类,需要子类具体实现
➢ 不可变:RDD 封装了计算逻辑,是不可以改变的,想要改变,只能产生新的 RDD,在
新的 RDD 里面封装计算逻辑
➢ 可分区、并行计算
二、Spark中的RDD(弹性分布式数据集)有以下常用API:
map(func)
: 对RDD中的每个元素应用给定的函数,并返回一个新的RDD。
scala
val mapRDD = rdd.map(
num => {
// 使用累加器
sumAcc.add(num)
num
}
)
filter(func)
: 根据给定的函数过滤RDD中的元素,并返回一个新的RDD。
scala
val orderActionRDD = actionRDD.filter(
action => {
val datas = action.split("_")
datas(8) != "null"
}
)
flatMap(func)
: 对RDD中的每个元素应用给定的函数,并将结果扁平化为一个新的RDD。
scala
val words: RDD[String] = lines.flatMap(_.split(" "))
reduce(func)
: 使用给定的函数将RDD中的所有元素聚合成一个值。
scala
val wordCount = mapWord.reduce(
(map1, map2) => {
map2.foreach {
case (word, count) => {
val newCount = map1.getOrElse(word, 0L) + count
map1.update(word, newCount)
}
}
map1
}
)
collect()
: 将RDD中的所有元素收集到驱动程序节点的数组中。
scala
mapRDD.collect()
-
count()
: 返回RDD中的元素个数。scalaval cnt = rdd.count()
-
first()
: 返回RDD中的第一个元素。scalaval first = rdd.first()
-
take(n)
: 返回RDD中的前n个元素。scalaval ints: Array[Int] = rdd.take(3)
-
takeSample(withReplacement, num, seed)
: 从RDD中随机抽取样本。scala -
foreach(func)
: 对RDD中的每个元素应用给定的函数,但不返回结果。scalardd.foreach( num => { // 使用累加器 sumAcc.add(num) } )
-
foreachPartition(func)
: 对RDD中的每个分区应用给定的函数。scalardd.foreachPartition(iter => { val conn = JDBCUtil.getConnection iter.foreach { case ((day, user, ad), count) => { } } conn.close() })
-
groupByKey()
: 根据键值对RDD中的键进行分组。scala -
reduceByKey(func)
: 根据键值对RDD中的键进行聚合。scala -
aggregateByKey(zeroValue, seqOp, combOp)
: 根据键值对RDD中的键进行聚合。scala -
sortBy(keyFunc)
: 根据给定的键函数对RDD中的元素进行排序。scala -
sortBy(keyFunc, ascending)
: 根据给定的键函数和升序标志对RDD中的元素进行排序。scala -
union(other)
: 合并两个RDD。scala -
intersection(other)
: 计算两个RDD的交集。scala -
subtract(other)
: 计算两个RDD的差集。scala -
distinct()
: 去除RDD中的重复元素。scala -
cartesian(other)
: 计算两个RDD的笛卡尔积。scala -
pipe(command)
: 使用外部命令处理RDD中的数据。scala -
saveAsTextFile(path)
: 将RDD保存为文本文件。scala -
textFile(path)
: 从文本文件中读取数据并创建RDD。scala -
parallelize(data)
: 从集合中创建RDD。scala -
toDF()
: 将RDD转换为DataFrame。scala -
toDS()
: 将RDD转换为Dataset。scala
这些API是Spark RDD编程模型中最常用的一些,它们可以帮助你完成数据处理、转换和聚合等任务。