Resource profiles

Spark resource profiles change dozens of configs at once to match the workload shape. Pick the right one instead of hand-tuning.

What a resource profile is

A resource profile is a named bundle of Spark configuration tuned for a workload shape (read-heavy, write-heavy, balanced). Fabric ships defaults and lets you define your own on an Environment. Setting one profile flips ~20 settings — shuffle partitions, AQE thresholds, file-size targets, broadcast limits — that you would otherwise tune individually and get wrong.

Built-in profiles

ProfileOptimizes forTypical use
readHeavyForSparkLarge scans feeding Spark transformsSilver/gold builds, big joins
readHeavyForPBIFiles shaped for Direct Lake / VertiPaqTables behind semantic models
writeHeavyMany concurrent writes, frequent commitsStreaming sinks, high-frequency MERGE
(default / balanced)MixedAd-hoc notebooks, exploration

Setting a profile

%%configure
{
  "conf": {
    "spark.fabric.resourceProfile": "readHeavyForSpark"
  }
}

Or on the Environment: Spark compute → Resource profile. Environment-level is preferred so scheduled runs are reproducible.

What each profile actually changes

Choosing

  1. Is the notebook's dominant cost a scan/join? → readHeavyForSpark.
  2. Does it feed a Direct Lake model? → readHeavyForPBI.
  3. Is it a streaming sink or high-frequency MERGE? → writeHeavy.
  4. Genuinely mixed or unsure? → leave the default and measure before tuning.

Do not stack a resource profile with a pile of manual spark.conf.set overrides — you lose the benefit of a tested bundle and reintroduce the drift the profile exists to prevent. Override at most one or two settings, and comment why.

Stay ahead of Fabric changes

Fabric runtime changes, API updates, and deprecations. No spam, unsubscribe anytime.

On this page