Github user jinxing64 commented on a diff in the pull request:

    https://github.com/apache/spark/pull/18031#discussion_r117610285
  
    --- Diff: core/src/main/scala/org/apache/spark/scheduler/MapStatus.scala ---
    @@ -193,8 +219,27 @@ private[spark] object HighlyCompressedMapStatus {
         } else {
           0
         }
    +    val threshold1 = Option(SparkEnv.get)
    +      .map(_.conf.get(config.SHUFFLE_ACCURATE_BLOCK_THRESHOLD))
    +      .getOrElse(config.SHUFFLE_ACCURATE_BLOCK_THRESHOLD.defaultValue.get)
    +    val threshold2 = avgSize * Option(SparkEnv.get)
    +      
.map(_.conf.get(config.SHUFFLE_ACCURATE_BLOCK_THRESHOLD_BY_TIMES_AVERAGE))
    +      
.getOrElse(config.SHUFFLE_ACCURATE_BLOCK_THRESHOLD_BY_TIMES_AVERAGE.defaultValue.get)
    +    val threshold = math.max(threshold1, threshold2)
    +    val hugeBlockSizesArray = ArrayBuffer[Tuple2[Int, Byte]]()
    +    if (numNonEmptyBlocks > 0) {
    +      i = 0
    +      while (i < totalNumBlocks) {
    +        if (uncompressedSizes(i) > threshold) {
    +          hugeBlockSizesArray += Tuple2(i, 
MapStatus.compressSize(uncompressedSizes(i)))
    +
    +        }
    +        i += 1
    +      }
    +    }
         emptyBlocks.trim()
         emptyBlocks.runOptimize()
    -    new HighlyCompressedMapStatus(loc, numNonEmptyBlocks, emptyBlocks, 
avgSize)
    +    new HighlyCompressedMapStatus(loc, numNonEmptyBlocks, emptyBlocks, 
avgSize,
    --- End diff --
    
    @viirya Thanks a lot for taking time looking into this pr :)
    
    > remove the huge blocks from the numerator in that calculation so that you 
more accurately size the smaller blocks
    
    Yes, I think this is really good idea to have accurate size for smaller 
blocks. But I'm proposing two configs(`spark.shuffle.accurateBlockThreshold` 
and `spark.shuffle.accurateBlockThresholdByTimesAverage` ) in current change, I 
have to compute the average twice: 1) the average calculated including huge 
blocks, thus I can filter out the huge blocks 2) the average calculated without 
huge blocks, thus I can have accurate size for the smaller blocks. A little bit 
complicated, right? How about remove the 
`spark.shuffle.accurateBlockThresholdByTimesAverage` ? Thus we can simplify the 
logic. @cloud-fan Any ideas about this?


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastruct...@apache.org or file a JIRA ticket
with INFRA.
---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org
For additional commands, e-mail: reviews-h...@spark.apache.org

Reply via email to