RDD编程API
Spark支持两个类型(算子)操作:Transformation
和Action
Action
触发代码的运行,我们一段spark代码里面至少需要有一个action操作。
常用的Action
动作 | 含义 |
---|---|
reduce(func) | 通过func函数聚集RDD中的所有元素,这个功能必须是课交换且可并联的 |
collect() | 在驱动程序中,以数组的形式返回数据集的所有元素 |
count() | 返回RDD的元素个数 |
first() | 返回RDD的第一个元素(类似于take(1)) |
take(n) | 返回一个由数据集的前n个元素组成的数组 |
takeSample(withReplacement,num, [seed]) | 返回一个数组,该数组由从数据集中随机采样的num个元素组成,可以选择是否用随机数替换不足的部分,seed用于指定随机数生成器种子 |
takeOrdered(n, [ordering]) | |
saveAsTextFile(path) | 将数据集的元素以textfile的形式保存到HDFS文件系统或者其他支持的文件系统,对于每个元素,Spark将会调用toString方法,将它装换为文件中的文本 |
saveAsSequenceFile(path) | 将数据集中的元素以Hadoop sequencefile的格式保存到指定的目录下,可以使HDFS或者其他Hadoop支持的文件系统。 |
saveAsObjectFile(path) | |
countByKey() | 针对(K,V)类型的RDD,返回一个(K,Int)的map,表示每一个key对应的元素个数。 |
foreach(func) | 在数据集的每一个元素上,运行函数func进行更新。 |
Action测试代码
package com.baizhi
import org.apache.spark.{SparkConf, SparkContext}
object ActionDemo {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setMaster("local[*]").setAppName("action demo")
val sc = new SparkContext(conf)
// ======================reduce===============================================
// val rdd = sc.parallelize(1 to 10,2)
// val result = rdd.reduce(_+_)
// println(result) //55
// ======================collect===============================================
// val rdd = sc.parallelize(1 to 10,2)
// val result = rdd.collect
// println(result) // Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
// ======================count===============================================
// val rdd = sc.parallelize(1 to 10,2)
// val result = rdd.count()
// println(result) // 10
// ======================first===============================================
// val rdd = sc.parallelize(1 to 10,2)
// val result = rdd.first()
// println(result) // 1
// ======================take===============================================
// val rdd = sc.parallelize(1 to 10,2)
// val result = rdd.take(5)
// println(result) // Array[Int] = Array(1, 2, 3, 4, 5)
// ======================takeSample===============================================
// 返回一个数组,该数组由从数据集中随机采样的num个元素组成,可以选择是否用随机数替换不足的部分,seed用于指定随机数生成器种子
// val rdd = sc.parallelize(1 to 10,2)
// val result = rdd.takeSample(false,2)
// println(result)
// ======================takeOrdered===============================================
// 排序完成后,取前num个元素
// val rdd = sc.parallelize(List(10,7,8,9,4,6,3,5),2)
// val result = rdd.takeOrdered(5)
// println(result.mkString(",")) // 3,4,5,6,7
// ======================saveAsTextFile===============================================
// val rdd = sc.parallelize(List(10,7,8,9,4,6,3,5),2)
// rdd.saveAsTextFile("result")
// ======================saveAsTextFile===============================================
// val rdd = sc.parallelize(List(1 to 10),2)
// rdd.saveAsObjectFile("result2")
// ======================saveAsSequenceFile(无)===============================================
// ======================countByKey===============================================
val rdd = sc.parallelize(List(("k1",10),("k2",2),("k1",20)))
val result = rdd.countByKey()
println(result) // Map(k1 -> 2, k2 -> 1)
// ======================foreach===============================================
// val rdd = sc.parallelize(List(("k1",10),("k2",2),("k1",20)))
// rdd.foreach((x) => println(x._1 + " "+ x._2))
}
}