Spark学习之路(四)【RDD编程 API——动作算子Action】

RDD编程API

Spark支持两个类型(算子)操作:TransformationAction

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))
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值