zoukankan      html  css  js  c++  java
  • spark join broadcast优化

    在大量数据中对一些字段进行关联。

    举例

    ipTable:需要进行关联的几千条ip数据(70k)
    hist:历史数据(百亿级别)

    直接join将会对所有数据进行shuffle,需要大量的io操作,相同的key会在同一个partition中进行处理,任务的并发度也收到了限制。

    这里写图片描述

    使用broadcast将会把小表分发到每台执行节点上,因此,关联操作都在本地完成,基本就取消了shuffle的过程,运行效率大幅度提高。

    这里写图片描述

    样本数据(2000w)性能测试对比

    小表没有进行broadcast

    无广播

    进行了broadcast,可以看到连shuffle过程都省略了

    这里写图片描述

    实现代码(spark1.5)

    //读取ip表
    val df = ...
    
    //如果数据小于设定的广播大小则将该表广播,默认10M
    df.cache.count
    
    //注册表
    df.registerTempTable("ipTable")
    
    //关联
    sqlContext.sql("select * from (select * from ipTable)a join (select * from hist)b on a.ip = b.ip")
    
    ......
    

    设置表广播的阈值,如果有需求且内存足够,可以将该值提高,默认10M

    spark.sql.autoBroadcastJoinThreshold

  • 相关阅读:
    vue换一换功能原型
    一些文章收集
    mint-ui popup自动关闭
    vue 实现二选一列表
    用数组实现矩阵乘法
    表格
    表单
    django项目创建和结构解释
    js操作元素样式
    操作标签属性
  • 原文地址:https://www.cnblogs.com/zhangyunlin/p/6168164.html
Copyright © 2011-2022 走看看