zoukankan      html  css  js  c++  java
  • 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)
    
  • 相关阅读:
    Asp.Net WebApi核心对象解析(一)
    关于.NET参数传递方式的思考
    关于.NET异常处理的思考
    吃瓜群众的三言两语,想听的就进来看看吧!
    C#文件安全管理解析
    开源免费且稳定实用的.NET PDF打印组件itextSharp(.NET组件介绍之八)
    免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
    免费高效实用的.NET操作Excel组件NPOI(.NET组件介绍之六)
    免费开源的DotNet任务调度组件Quartz.NET(.NET组件介绍之五)
    免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
  • 原文地址:https://www.cnblogs.com/ywqtro/p/14316046.html
Copyright © 2011-2022 走看看