• 2021寒假(19)


    常用算子用法

    1)将处理的数据逐条进行映射转换,这里的转换可以是类型的转换,也可以是值的转换。
    val dataRDD: RDD[Int] = sparkContext.makeRDD(List(1,2,3,4))
    val dataRDD1: RDD[Int] = dataRDD.map(
     num => {num * 2
     } )
    val dataRDD2: RDD[String] = dataRDD1.map(
     num => {
     "" + num
     } )
    
    2)将待处理的数据以分区为单位发送到计算节点进行处理,这里的处理是指可以进行任意的处理,哪怕是过滤数据。
    val dataRDD1: RDD[Int] = dataRDD.mapPartitions(
     datas => {
     datas.filter(_==2)
     } )
    

    3)将待处理的数据以分区为单位发送到计算节点进行处理,这里的处理是指可以进行任意的处理,哪怕是过滤数据,在处理时同时可以获取当前分区索引。

    val dataRDD1 = dataRDD.mapPartitionsWithIndex(
     (index, datas) => {
     datas.map(index, _)
     } )
    

    4)将处理的数据进行扁平化后再进行映射处理,所以算子也称之为扁平映射

    val dataRDD = sparkContext.makeRDD(List(
     List(1,2),List(3,4)
    ),1)
    val dataRDD1 = dataRDD.flatMap(
     list => list
    )
    

     5)将同一个分区的数据直接转换为相同类型的内存数组进行处理,分区不变

    val dataRDD = sparkContext.makeRDD(List(
     1,2,3,4
    ),1)
    val dataRDD1:RDD[Array[Int]] = dataRDD.glom()
    

     6)将数据根据指定的规则进行分组, 分区默认不变,但是数据会被打乱重新组合,我们将这样的操作称之为 shuffle。极限情况下,数据可能被分在同一个分区中

    val dataRDD = sparkContext.makeRDD(List(1,2,3,4),1)
    val dataRDD1 = dataRDD.groupBy(
     _%2
    )
    

     7)将数据根据指定的规则进行筛选过滤,符合规则的数据保留,不符合规则的数据丢弃。当数据进行筛选过滤后,分区不变,但是分区内的数据可能不均衡,生产环境下,可能会出现数据倾斜。

    val dataRDD = sparkContext.makeRDD(List(
     1,2,3,4
    ),1)
    val dataRDD1 = dataRDD.filter(_%2 == 0)
    

     8)根据指定的规则从数据集中抽取数据

    val dataRDD = sparkContext.makeRDD(List(
     1,2,3,4
    ),1)
    // 抽取数据不放回(伯努利算法)
    // 伯努利算法:又叫 0、1 分布。例如扔硬币,要么正面,要么反面。
    // 具体实现:根据种子和随机算法算出一个数和第二个参数设置几率比较,小于第二个参数要,大于不
    要
    // 第一个参数:抽取的数据是否放回,false:不放回
    // 第二个参数:抽取的几率,范围在[0,1]之间,0:全不取;1:全取;
    // 第三个参数:随机数种子
    val dataRDD1 = dataRDD.sample(false, 0.5)
    // 抽取数据放回(泊松算法)
    // 第一个参数:抽取的数据是否放回,true:放回;false:不放回
    // 第二个参数:重复数据的几率,范围大于等于 0.表示每一个元素被期望抽取到的次数
    // 第三个参数:随机数种子
    val dataRDD2 = dataRDD.sample(true, 2)
    

     9)将数据集中重复的数据去重

    val dataRDD = sparkContext.makeRDD(List(
     1,2,3,4,1,2
    ),1)
    val dataRDD1 = dataRDD.distinct()
    val dataRDD2 = dataRDD.distinct(2)
    

     10)根据数据量缩减分区,用于大数据集过滤后,提高小数据集的执行效率当 spark 程序中,存在过多的小任务的时候,可以通过 coalesce 方法,收缩合并分区,减少分区的个数,减小任务调度成本

    val dataRDD = sparkContext.makeRDD(List(
     1,2,3,4,1,2
    ),6)
    val dataRDD1 = dataRDD.coalesce(2)
    
  • 相关阅读:
    算法竞赛入门经典训练指南——UVA 11300 preading the Wealth
    hiho一下 第148周
    ajax总结及案例
    Spring事务
    Struts2拦截器介绍
    Struts2的拦截器----Dog实例
    Struts2文件的下载
    Struts2文件的上传
    Struts2类型转换
    Struts2 属性驱动、模型驱动、异常机制
  • 原文地址:https://www.cnblogs.com/ywqtro/p/14316046.html
Copyright © 2020-2023  润新知