Spark之Transformation类算子详解

本文详细介绍了Spark的Transformation类算子,包括filter用于筛选符合条件的记录,map实现元素的一对一映射,flatMap用于一对多的数据转换,sample进行随机抽样,reduceByKey对相同Key的值进行聚合操作,以及sortByKey/sortBy对键进行排序的功能。
摘要由CSDN通过智能技术生成

 Transformation类算子:
 filter
过滤符合条件的记录数,true保留,false过滤掉。

 map
将一个RDD中的每个数据项,通过map中的函数映射变为一个新的元素。
特点:输入一条,输出一条数据。

 flatMap
先map后flat。与map类似,每个输入项可以映射为0到多个输出项。

 sample
随机抽样算子,根据传进去的小数按比例进行又放回或者无放回的抽样。

 reduceByKey
将相同的Key根据相应的逻辑进行处理。
 sortByKey/sortBy
作用在K,V格式的RDD上,对key进行升序或者降序排序。

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object ScalaSpark {
  def main(args: Array[String]): Unit = {

    val conf = new SparkConf()
    conf.setMaster("local")
    conf.setAppName("wc")
    val con = new SparkContext(conf)
    con.setLogLevel("error")//不显示log(可选的有:ALL,DEBUG,ERROR,FATAL,TRACE,WARN,INFO,OFF)
    val lines = con.textFile("./data/words")
    //0.1-》随机抽样比例为0.1 (抽取的数据量是在10%左右) //指定seed,执行结果不变
    val result: RDD[String] = lines.sample(true,0.1,10L)
    result.foreach(println)


//    val words = lines.flatMap(line => {line.split(" ")})
//    val pairWords = words.map(one => {(one,1)})
//    val reduceResult: RDD[(String, Int)] = pairWords.reduceByKey((v1: Int, v2: Int) => {v1 + v2})

    //排序(默认升序,加false降序)
    //reduceResult.sortBy(tp =>{tp._2},false).foreach(println)

    //通过sortByKey()排序
    //拿到二元组,进行翻转,排序后再翻转就好了

//    val value: RDD[(Int, String)] = reduceResult.map(tp =>{tp.swap})
//    val result: RDD[(Int, String)] = value.sortByKey(false)//默认升序
//    val lastValue = result.map(tp =>{tp.swap})
//    lastValue.foreach(println)


    /**
      * 	filter
      * 过滤符合条件的记录数,true保留,false过滤掉。
      */
    //    val rdd1 = lines.flatMap(_.split(" "))
//    rdd1.filter("hello".equals(_)).foreach(println)

    /**
      * 	flatMap
      * 先map后flat。与map类似,每个输入项可以映射为0到多个输出项。
      * faltmap 一对多
      */
    //lines.flatMap(_.split(" ")).foreach(println)

    /**
      * map
      * 将一个RDD中的每个数据项,通过map中的函数映射变为一个新的元素。
      * 特点:输入一条,输出一条数据。
      */
    //lines.map(line =>{
//     line+"#"
//    }).foreach(println(_))


  }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值