spark学习-24-Spark算子Transformations和Action使用大全(Action章)

来源:互联网 发布:c语言智能2048 编辑:程序博客网 时间:2024/06/10 05:12

spark学习-22-Spark算子Transformations和Action使用大全(Transformations章(一))
http://blog.csdn.net/qq_21383435/article/details/77529591

spark学习-23-Spark算子Transformations和Action使用大全(Transformations章(二))
http://blog.csdn.net/qq_21383435/article/details/77560174

spark学习-24-Spark算子Transformations和Action使用大全(Action章)
http://blog.csdn.net/qq_21383435/article/details/77560484

3. Action

3.1 reduce

3.1.1 概述

语法(java):

static T reduce(Function2<T,T,T> f)

说明:

对RDD成员使用func进行reduce操作,func接受两个参数,合并之后只返回一个值。reduce操作的返回结果只有一个值。需要注意的是,func会并发执行

3.1.2 Scala示例

def reduce(sc: SparkContext): Unit = {    println(sc.parallelize(1 to 10)        .reduce((x, y) => x + y))}// 结果55

3.2 collect

3.2.1 概述

语法(java):

static java.util.List<T> collect()

说明:

将RDD读取至Driver程序,类型是Array,一般要求RDD不要太大。

示例略

3.3 count

3.3.1 概述

语法(java):

static long count()

说明:

返回RDD的成员数量

3.3.2 Scala示例

def count(sc: SparkContext): Unit = {    println(sc.parallelize(1 to 10)        .count)}// 结果10

3.4 first

3.4.1 概述

语法(java):

static T first()

说明:

返回RDD的第一个成员,等价于take(1)

3.4.2 Scala示例

def first(sc: SparkContext): Unit = {    println(sc.parallelize(1 to 10)        .first())}// 结果1

3.5 take

3.5.1 概述

语法(java):

static java.util.List<T> take(int num)

说明:

返回RDD前n个成员

3.5.2 Scala示例

def take(sc: SparkContext): Unit = {    sc.parallelize(1 to 10)        .take(2).foreach(println)}// 结果12

3.6 takeSample

3.6.1 概述

语法(java):

static java.util.List<T> takeSample(boolean withReplacement,                         int num,                         long seed)

说明:

和sample用法相同,只不第二个参数换成了个数。返回也不是RDD,而是collect。

3.6.2 Scala示例

def takeSample(sc: SparkContext): Unit = {    sc.parallelize(1 to 10)        .takeSample(withReplacement = false, 3, 1)        .foreach(println)}// 结果1810

3.7 takeOrdered

3.7.1 概述

语法(java):

java.util.List<T> takeOrdered(int num)java.util.List<T> takeOrdered(int num,                          java.util.Comparator<T> comp)

说明:

用于从RDD中,按照默认(升序)或指定排序规则,返回前num个元素。

3.7.2 Scala示例

def takeOrdered(sc: SparkContext): Unit = {    sc.parallelize(Array(5,6,2,1,7,8))        .takeOrdered(3)(new Ordering[Int](){            override def compare(x: Int, y: Int): Int = y.compareTo(x)        })        .foreach(println)}// 结果876

3.8 saveAsTextFile

3.8.1 概述

语法(java):

void saveAsTextFile(String path)void saveAsTextFile(String path,                  Class<? extends org.apache.hadoop.io.compress.CompressionCodec> codec)

说明:

将RDD转换为文本内容并保存至路径path下,可能有多个文件(和partition数有关)。路径path可以是本地路径或HDFS地址,转换方法是对RDD成员调用toString函数

3.8.2 Scala示例

def saveAsTextFile(sc: SparkContext): Unit = {    sc.parallelize(Array(5,6,2,1,7,8))            .saveAsTextFile("/Users/zhangws/Documents/test")}// 结果/Users/zhangws/Documents/test目录下_SUCCESSpart-00000// part-00000文件内容562178

3.9 saveAsSequenceFile

3.9.1 概述

语法(java):

def saveAsSequenceFile(path: String, codec: Option[Class[_ <: CompressionCodec]] = None): Unit

说明:

与saveAsTextFile类似,但以SequenceFile格式保存,成员类型必须实现Writeable接口或可以被隐式转换为Writable类型(比如基本Scala类型Int、String等)

示例略

3.10 saveAsObjectFile

3.10.1 概述

语法(java):

static void saveAsObjectFile(String path)

说明:

用于将RDD中的元素序列化成对象,存储到文件中。对于HDFS,默认采用SequenceFile保存。

示例略

3.11 countByKey

3.11.1 概述

语法(java):

java.util.Map<K,Long> countByKey()

说明:

仅适用于(K, V)类型,对key计数,返回(K, Int)

3.11.2 Scala示例

def reduce(sc: SparkContext): Unit = {    println(sc.parallelize(Array(("A", 1), ("B", 6), ("A", 2), ("C", 1), ("A", 7), ("A", 8)))            .countByKey())}// 结果Map(B -> 1, A -> 4, C -> 1)

3.12 foreach

3.12.1 概述

语法(java):

static void foreach(VoidFunction<T> f)

说明:

对RDD中的每个成员执行func,没有返回值,常用于更新计数器或输出数据至外部存储系统。这里需要注意变量的作用域

3.12.2 Java示例

forEach(System.out::println);forEach(v -> System.out.println(v));

3.12.3 Scala示例

foreach(println)

4. 参考

Spark中parallelize函数和makeRDD函数的区别

spark transformation算子

Spark的算子的分类

Spark函数讲解:aggregateByKey

pyspark和spark pipe性能对比 用例程序

Spark Rdd coalesce()方法和repartition()方法

Spark如何解决常见的Top N问题

【Spark Java API】Action(4)—sortBy、takeOrdered、takeSample