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 [email protected] or file a JIRA ticket
with INFRA.
---
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]