作家
登录

Spark源码分析之分区器的作用

作者: 来源: 2017-04-24 14:03:54 阅读 我要评论

  •         RangePartitioner.determineBounds(candidates, partitions) 
  •       } 
  •     } 
  •   } 
  •    
  •   def sketch[K : ClassTag]( 
  •       rdd: RDD[K], 
  •       sampleSizePerPartition: Int): (Long, Array[(Int, Long, Array[K])]) = { 
  •     val shift = rdd.id 
  •     // val classTagK = classTag[K] // to avoid serializing the entire partitioner object 
  •     val sketched = rdd.mapPartitionsWithIndex { (idx, iter) => 
  •       val seed = byteswap32(idx ^ (shift << 16)) 
  •       val (sample, n) = SamplingUtils.reservoirSampleAndCount( 
  •         iter, sampleSizePerPartition, seed) 
  •       //包装成三元组,(索引号,分区的内容个数,抽样的内容) 
  •       Iterator((idx, n, sample)) 
  •     }.collect() 
  •     val numItems = sketched.map(_._2).sum 
  •     //返回(数据条数,(索引号,分区的内容个数,抽样的内容)) 
  •     (numItems, sketched) 
  •   } 
  •    
  • 真正的抽样算法在SamplingUtils中,因为在Spark中是须要一次性取多个值的,是以直接去前n个数值,然后依次概率调换即可:

    1. def reservoirSampleAndCount[T: ClassTag]( 
    2.       input: Iterator[T], 
    3.       k: Int
    4.       seed: Long = Random.nextLong()) 
    5.     : (Array[T], Long) = { 
    6.     //创建临时数组 
    7.     val reservoir = new Array[T](k) 
    8.     // Put the first k elements in the reservoir. 
    9.     // 掏出前k个数,并把对应的rdd中的数据放入对应的序号的数组中 
    10.     var i = 0 
    11.     while (i < k && input.hasNext) { 
    12.       val item = input.next() 
    13.       reservoir(i) = item 
    14.       i += 1 
    15.     } 
    16.  
    17.     // If we have consumed all the elements, return them. Otherwise do the WordStrment. 
    18.     // 如不雅全部的元素,比要采取的采样数少,那么直接返回 
    19.     if (i < k) { 
    20.       // If input size < k, trim the array 

        推荐阅读

        SDN能解决很多问题,但不包括安全

      跟着数字化企业尽力寻求最佳安然解决筹划来保护其赓续扩大的收集,很多企颐魅正在寻求供给互操作性功能的下一代对象。软件定义收集(SDN)具有很多的优势,经由过程将多个设备的┞菲握平面整>>>详细阅读


      本文标题:Spark源码分析之分区器的作用

      地址:http://www.17bianji.com/lsqh/34919.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)