博客
关于我
【Spark】Spark 优化操作之自定义 distinct
阅读量:372 次
发布时间:2019-03-05

本文共 801 字,大约阅读时间需要 2 分钟。

由于Spark的distinct算子默认实现效率较低,需要自行优化以提升性能。

具体实现方式非常简单,主要基于集合的特性。

def mydistinct(iter: Iterator[(String, Int)]: Iterator[String] = {     iter.foldLeft(Set[String]())((curS, item) => curS + item._1).toIterator}

使用mydistinct的方式如下:

val rdd2 = rdd1.map(x => (x._1 + SPLIT + x._2 + SPLIT + x._3 + SPLIT + x._4, 1)).partitionBy(new org.apache.spark.HashPartitioner(100)).mapPartitions(SetProcess.mydistinct).map(key => {       val strs = key.split(SPLIT)       (strs(0), strs(1), strs(2), strs(3))

说明:

  • mydistinct通过Set的特性实现去重,在每个partition内完成后再进行reduce,这样可以显著提升去重效率。
  • 在进行mydistinct之前,需要先对数据进行partitionBy操作。因为数据的key值发生了变化,原有的RDD分区可能不适用于新的RDD。如果不做partitionBy,可能会导致不同的partition之间存在重复数据,从而影响最终的去重效果。
  • 通过partitionBy操作,可以将相同key值的数据刷新到同一个partition中。在每个partition内使用Set去重,大大提高了整体性能。
  • 这种方法充分利用了Spark的高效分区机制和集合的去重特性,实现了高效的去重操作。

    转载地址:http://xdig.baihongyu.com/

    你可能感兴趣的文章
    P3950部落冲突
    查看>>
    P4 Tutorials Flowlet Switching
    查看>>
    P4313 文理分科
    查看>>
    P4491 [HAOI2018] 染色
    查看>>
    SpringBoot中集成LiteFlow(轻量、快速、稳定可编排的组件式规则引擎)实现复杂业务解耦、动态编排、高可扩展
    查看>>
    P5-js python中的map()函数
    查看>>
    SpringBoot中集成influxdb-java实现连接并操作Windows上安装配置的influxDB(时序数据库)
    查看>>
    P8738 [蓝桥杯 2020 国 C] 天干地支
    查看>>
    PA
    查看>>
    Package Header Cursor
    查看>>
    package,source folder,folder相互转换
    查看>>
    SpringBoot中集成Flyway实现数据库sql版本管理入门以及遇到的那些坑
    查看>>
    package.json文件常用指令说明
    查看>>
    SpringBoot中集成eclipse.paho.client.mqttv3实现mqtt客户端并支持断线重连、线程池高并发改造、存储入库mqsql和redis示例业务流程,附资源下载
    查看>>
    Padding
    查看>>
    paddlehub安装及对口罩检测
    查看>>
    SpringBoot中集成Actuator实现监控系统运行状态
    查看>>