Bird
Raised Fist0
Apache Sparkdata~5 mins

Adaptive query execution in Apache Spark - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is Adaptive Query Execution (AQE) in Apache Spark?
AQE is a feature in Spark that dynamically adjusts query plans during execution to improve performance based on runtime statistics.
Click to reveal answer
intermediate
How does AQE help with skewed data in Spark?
AQE detects data skew during execution and can split large skewed partitions into smaller ones to balance the workload.
Click to reveal answer
intermediate
Name one optimization AQE performs related to join operations.
AQE can convert a shuffle join to a broadcast join if the size of one side is small enough at runtime.
Click to reveal answer
intermediate
What runtime information does AQE use to optimize queries?
AQE uses statistics like partition sizes, data distribution, and shuffle metrics collected during query execution.
Click to reveal answer
beginner
True or False: AQE requires manual tuning of query plans before execution.
False. AQE automatically adjusts query plans during execution without manual intervention.
Click to reveal answer
What does Adaptive Query Execution primarily improve in Spark?
AData storage format
BQuery performance by adjusting plans at runtime
CUser interface responsiveness
DCluster hardware configuration
Which problem can AQE help solve automatically?
AIncorrect SQL syntax
BNetwork failures
CData skew causing slow tasks
DMemory leaks in Spark UI
When does AQE decide to switch a shuffle join to a broadcast join?
AWhen one side is small enough at runtime
BBefore query execution starts
COnly for streaming queries
DWhen cluster memory is low
Which of these is NOT a source of information AQE uses?
AUser login times
BData distribution
CPartition sizes
DShuffle metrics
Does AQE require manual tuning of query plans before running the job?
AYes, always
BOnly in Spark 2.x versions
COnly for complex queries
DNo, it adjusts plans automatically
Explain how Adaptive Query Execution improves query performance in Apache Spark.
Think about how Spark changes its plan while running the query.
You got /4 concepts.
    Describe the types of runtime information AQE uses to optimize query execution.
    What does Spark measure during query execution?
    You got /3 concepts.

      Practice

      (1/5)
      1.

      What is the main purpose of adaptive query execution in Apache Spark?

      easy
      A. To improve query performance by adjusting the execution plan during runtime
      B. To statically compile queries before execution
      C. To disable query optimization for faster execution
      D. To manually rewrite queries for better speed

      Solution

      1. Step 1: Understand adaptive query execution concept

        Adaptive query execution allows Spark to change the query plan dynamically while the query runs.
      2. Step 2: Identify the main benefit

        This dynamic adjustment improves performance by optimizing joins and data shuffles based on actual data size.
      3. Final Answer:

        To improve query performance by adjusting the execution plan during runtime -> Option A
      4. Quick Check:

        Adaptive query execution = dynamic plan adjustment [OK]
      Hint: Think: adaptive means changing during execution [OK]
      Common Mistakes:
      • Confusing adaptive execution with static query compilation
      • Believing it disables optimization
      • Thinking it requires manual query rewriting
      2.

      Which Spark configuration enables adaptive query execution?

      ?
      easy
      A. spark.sql.execution.adaptive.enabled = false
      B. spark.execution.adaptive = true
      C. spark.adaptive.query.execution = true
      D. spark.sql.adaptive.enabled = true

      Solution

      1. Step 1: Recall the exact configuration key

        The correct key to enable adaptive query execution is spark.sql.adaptive.enabled.
      2. Step 2: Confirm the value to enable

        Setting it to true activates adaptive query execution.
      3. Final Answer:

        spark.sql.adaptive.enabled = true -> Option D
      4. Quick Check:

        Enable adaptive query with spark.sql.adaptive.enabled [OK]
      Hint: Remember full key: spark.sql.adaptive.enabled [OK]
      Common Mistakes:
      • Using incorrect config keys like spark.execution.adaptive
      • Setting the value to false instead of true
      • Mixing up config names with similar words
      3.

      Given the following Spark SQL code with adaptive query execution enabled, what will be the effect on the join?

      spark.conf.set("spark.sql.adaptive.enabled", "true")
      
      val df1 = spark.range(1000)
      val df2 = spark.range(10)
      
      val joined = df1.join(df2, df1("id") === df2("id"))
      joined.explain(true)

      What does adaptive query execution do here?

      medium
      A. It converts the join to a broadcast join because df2 is small
      B. It disables the join optimization and runs a shuffle join
      C. It throws an error because adaptive execution cannot handle joins
      D. It caches both dataframes before joining

      Solution

      1. Step 1: Identify adaptive execution behavior on join

        Adaptive query execution detects small tables and converts joins to broadcast joins to reduce shuffle.
      2. Step 2: Analyze data sizes in example

        df2 has only 10 rows, which is small enough to broadcast.
      3. Final Answer:

        It converts the join to a broadcast join because df2 is small -> Option A
      4. Quick Check:

        Small table join = broadcast join [OK]
      Hint: Small table in join? Adaptive broadcasts it [OK]
      Common Mistakes:
      • Assuming adaptive disables optimization
      • Thinking adaptive causes errors on joins
      • Believing it caches dataframes automatically
      4.

      Consider this Spark code snippet with adaptive query execution enabled:

      spark.conf.set("spark.sql.adaptive.enabled", "true")
      
      val df1 = spark.range(1000)
      val df2 = spark.range(1000000)
      
      val joined = df1.join(df2, df1("id") === df2("id"))
      joined.show()

      The job runs very slowly. What is the likely cause?

      medium
      A. Adaptive query execution is disabled by default
      B. Adaptive query execution tries to broadcast df2, which is too large
      C. The join condition is invalid causing a runtime error
      D. Spark automatically caches df2 causing memory overflow

      Solution

      1. Step 1: Understand adaptive join behavior with large tables

        Adaptive query execution may try to broadcast a table if it thinks it's small enough.
      2. Step 2: Analyze table sizes

        df2 has 1,000,000 rows, which is too large to broadcast efficiently, causing slow execution.
      3. Final Answer:

        Adaptive query execution tries to broadcast df2, which is too large -> Option B
      4. Quick Check:

        Broadcasting large tables causes slow jobs [OK]
      Hint: Large table broadcast causes slow join [OK]
      Common Mistakes:
      • Assuming adaptive is disabled by default
      • Thinking join condition is invalid
      • Believing Spark caches large tables automatically
      5.

      You have a Spark job joining three datasets of unknown sizes. How can adaptive query execution help optimize this multi-join query?

      hard
      A. It forces all joins to be shuffle joins regardless of size
      B. It disables all joins and runs map-only jobs
      C. It dynamically chooses broadcast or shuffle joins for each join based on runtime data size
      D. It requires manual hints to optimize each join

      Solution

      1. Step 1: Understand adaptive query execution with multiple joins

        Adaptive query execution evaluates data sizes during runtime for each join.
      2. Step 2: Explain optimization choice

        It chooses broadcast joins for small tables and shuffle joins for large tables automatically.
      3. Step 3: Apply to multi-join scenario

        For three datasets, it optimizes each join individually based on actual data size.
      4. Final Answer:

        It dynamically chooses broadcast or shuffle joins for each join based on runtime data size -> Option C
      5. Quick Check:

        Adaptive = dynamic join strategy per join [OK]
      Hint: Adaptive picks join type per join at runtime [OK]
      Common Mistakes:
      • Thinking adaptive disables joins
      • Assuming all joins become shuffle joins
      • Believing manual hints are always required
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard