当前位置:   article > 正文

SparkStreaming解决数据倾斜方法_spark kafka 数据倾斜

spark kafka 数据倾斜

SparkStreaming解决数据倾斜方法
两阶段聚合的方式解决数据倾斜

在这里插入图片描述

解释:
对DStream 进行map操作对原始key前加上随机值,map完后进行第一次reducebykey操作,此结果为打散key后的reducebykey结果,再次进行map操作根据分隔符,去掉随机数保留原有key,map后再进行reducebykey,保证相同key的数据准确累加。

代码实现

    val dsStream=stream.filter(item => item.value().split("\t").length == 3)//过滤合格的数据
    .mapPartitions(partitions => //对所有分区的数据进行转换
        partitions.map(item => {
          val rand = new Random() //创建随机数对象
          val line = item.value() //获取value
          val arr = line.split("\t")  //切割
          val id = arr(1)       //取第二个元素
          (rand.nextInt(3) + "_" + id, 1)    //随机数与app_id进行拼接,并且返回二元组
        }))
    val result = dsStream.reduceByKey(_ + _)     //重组之后的第一次reduceByKey
    result.map(item => {                                     //进行map转换把key切割还原
      val id = item._1.split("_")(1)
      (id, item._2)
    }).reduceByKey(_ + _).print()                //还原之后进行第二次聚合
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

想要更多文档资料及更多大数据相关文档资料请加qq群下载:912703269

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/975896
推荐阅读
相关标签
  

闽ICP备14008679号