Spark-Core(RDD行动算子)

一、RDD行动算子

行动算子就是会触发action的算子,触发action的含义就是真正的计算数据。

1、reduce

  • 函数签名:
Scala 复制代码
def reduce(f: (T, T) => T): T
  • 函数说明:聚集 RDD 中的所有元素,先聚合分区内数据,再聚合分区间数据。

举栗:

Scala 复制代码
val rdd: RDD[Int] = sc.makeRDD(List(1,2,3,4))
val reduceResult: Int = rdd.reduce(_+_)
println(reduceResult)

2、 collect

  • 函数签名:
Scala 复制代码
def collect(): Array[T]
  • 函数说明:在驱动程序中,以数组 Array 的形式返回数据集的所有元素

举栗:

Scala 复制代码
val sparkConf = new SparkConf().setMaster("local[*]").setAppName("Operator")
    val sc = new SparkContext(sparkConf)

    val rdd = sc.makeRDD(List(1,2,3,4),2)
    val ints = rdd.collect()
    println(ints.mkString(","))

    sc.stop()

3、 foreach

  • 函数签名:
Scala 复制代码
def foreach(f: T => Unit): Unit = withScope {
 val cleanF = sc.clean(f)
 sc.runJob(this, (iter: Iterator[T]) => iter.foreach(cleanF))
}
  • 函数说明:分布式遍历 RDD 中的每一个元素,调用指定函数

举栗:

Scala 复制代码
val rdd: RDD[Int] = sc.makeRDD(List(1,2,3,4))
rdd.collect().foreach(println)

4、count

  • 函数签名:
Scala 复制代码
def count(): Long
  • 函数说明:返回 RDD 中元素的个数

举栗:

Scala 复制代码
val rdd: RDD[Int] = sc.makeRDD(List(1,2,3,4))
val countResult: Long = rdd.count()
println(countResult)

5、first

  • 函数签名:
Scala 复制代码
def first(): T
  • 函数说明:返回 RDD 中的第一个元素

举栗:

Scala 复制代码
val rdd: RDD[Int] = sc.makeRDD(List(1,2,3,4))
val firstResult: Int = rdd.first()
println(firstResult)

6、take

  • 函数签名:
Scala 复制代码
def take(num: Int): Array[T]
  • 函数说明:返回一个由 RDD 的前 n 个元素组成的数组

举栗:

Scala 复制代码
val rdd: RDD[Int] = sc.makeRDD(List(1,2,3,4))
val takeResult: Array[Int] = rdd.take(2)
takeResult.foreach(println)

7、takeOrdered

  • 函数签名:
Scala 复制代码
def takeOrdered(num: Int)(implicit ord: Ordering[T]): Array[T]
  • 函数说明:返回该 RDD 排序后的前 n 个元素组成的数组

举栗:

Scala 复制代码
val rdd: RDD[Int] = sc.makeRDD(List(1,3,2,4))
val result: Array[Int] = rdd.takeOrdered(2)
result.foreach(println)

8、aggregate

  • 函数签名:
Scala 复制代码
def aggregate[U: ClassTag](zeroValue: U)(seqOp: (U, T) => U, combOp: (U, U) => U): U
  • 函数说明:分区的数据通过初始值和分区内的数据进行聚合,然后再和初始值进行分区间的数据聚合

举栗:

Scala 复制代码
val rdd: RDD[Int] = sc.makeRDD(List(1,2,3,4),8)
// 将该 RDD 所有元素相加得到结果
val result1: Int = rdd.aggregate(0)(_+_, _+_)
val result2: Int = rdd.aggregate(10)(_+_,_+_)

println(result1)
println("**********")

9、fold

  • 函数签名:
Scala 复制代码
def fold(zeroValue: T)(op: (T, T) => T): T
  • 函数说明:折叠操作,aggregate 的简化版操作

举栗:

Scala 复制代码
val rdd: RDD[Int] = sc.makeRDD(List(1, 2, 3, 4))
val foldResult: Int = rdd.fold(0)(_+_)
println(foldResult)

10、countByKey

  • 函数签名:
Scala 复制代码
def countByKey(): Map[K, Long]
  • 函数说明:统计每种 key 的个数

举栗:

Scala 复制代码
val rdd: RDD[(Int, String)] = sc.makeRDD(List((1, "a"), (1, "a"), (1, "a"), (2,"b"), (3, "c"), (3, "c")))
val result: collection.Map[Int, Long] = rdd.countByKey()
print(result)

11、 save 相关算子

  • 函数签名:
Scala 复制代码
def saveAsTextFile(path: String): Unit
def saveAsObjectFile(path: String): Unit
def saveAsSequenceFile(
 path: String,
 codec: Option[Class[_ <: CompressionCodec]] = None): Unit //了解即可
  • 函数说明:将数据保存到不同格式的文件中

举栗:

Scala 复制代码
val rdd: RDD[Int] = sc.makeRDD(List(1, 2, 3, 4))
// 保存成 Text 文件
rdd.saveAsTextFile("Spark-core/output/output")
// 序列化成对象保存到文件
rdd.saveAsObjectFile("Spark-core/output/output1")
相关推荐
nvd117 小时前
Flink 批处理驱动的湖仓 AI 财务研报流水线:从双流广播汇聚到 Agent 智能决策与原生 Iceberg 落盘全景实战
大数据·人工智能·flink
计算机编程指导师9 小时前
【计算机毕设推荐】基于Hadoop+Spark的公共交通运营数据分析与可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·计算机·数据分析·spark·交通
QYR_1111 小时前
机械制造用固体润滑涂层市场分析:2032年全球市场规模预计达8.78亿元,CAGR为6.2%
大数据·人工智能·物联网
数字化顾问11 小时前
(144页PPT)数字化转型汽车企业数智化战略规划(附下载方式)
大数据
智慧物业老杨12 小时前
数字底座,重构小区治理秩序
大数据
计算机编程指导师13 小时前
【计算机毕设选题推荐】基于Hadoop的宫颈癌变进程光谱数据分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·数据分析·spark·毕业设计·宫颈癌变
Pniubi13 小时前
分布式锁分类讲解
分布式
guhunyihan13 小时前
无代码系统搭建平台,探索恐象 AI 带来的开发新范式
大数据·人工智能
计算机编程指导师14 小时前
【计算机毕设选题推荐】基于Hadoop+Spark的化妆品销售大数据分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·spark·毕业设计·课程设计·化妆品
benchmark_cc14 小时前
前复权数据每天可能变化,历史数据库应该覆盖还是保留原始价格?
大数据·python·pandas·量化交易·股票数据·quantdash