Bird
Raised Fist0
Apache Sparkdata~10 mins

Output modes (append, complete, update) in Apache Spark - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Output modes (append, complete, update)
Start Streaming Query
↓
New Data Arrives
↓
Check Output Mode
↓
Append
↓
Add new
↓
rows only
↓
Write to Sink
↓
Wait for next batch
↓
Repeat
This flow shows how Spark streaming handles new data based on the output mode: append adds new rows, complete replaces all rows, update changes only updated rows.
Execution Sample
Apache Spark
query = df.writeStream
  .outputMode('append')
  .format('console')
  .start()

query.awaitTermination()
This code starts a streaming query that prints only new rows arriving in each batch.
Execution Table
BatchNew DataOutput ModeActionOutput to Sink
1[{id:1, val:10}]appendAdd new rows only[{id:1, val:10}]
2[{id:2, val:20}]appendAdd new rows only[{id:2, val:20}]
3[{id:1, val:15}]appendAdd new rows only[{id:1, val:15}]
1[{id:1, val:10}]completeReplace all rows[{id:1, val:10}]
2[{id:2, val:20}]completeReplace all rows[{id:2, val:20}]
3[{id:1, val:15}]completeReplace all rows[{id:1, val:15}]
1[{id:1, val:10}]updateAdd new or updated rows[{id:1, val:10}]
2[{id:2, val:20}]updateAdd new or updated rows[{id:1, val:10}, {id:2, val:20}]
3[{id:1, val:15}]updateUpdate changed rows only[{id:1, val:15}, {id:2, val:20}]
💡 Streaming ends or is stopped manually; output depends on mode and data changes.
Variable Tracker
VariableStartAfter Batch 1After Batch 2After Batch 3
Output (append)[][{id:1, val:10}][{id:2, val:20}][{id:1, val:15}]
Output (complete)[][{id:1, val:10}][{id:2, val:20}][{id:1, val:15}]
Output (update)[][{id:1, val:10}][{id:1, val:10}, {id:2, val:20}][{id:1, val:15}, {id:2, val:20}]
Key Moments - 3 Insights
Why does the 'append' mode output only new rows even if some rows have changed?
Because 'append' mode only adds new rows that arrive in the batch. It does not update or replace existing rows, as shown in execution_table rows 1-3.
How does 'complete' mode handle updates to existing rows?
'Complete' mode replaces the entire output with all rows seen so far, including updates. This is why output grows and changes fully each batch, as in execution_table rows 4-6.
What is the difference between 'update' and 'append' modes in handling changed rows?
'Update' mode outputs only new or changed rows, updating existing ones, while 'append' outputs only new rows without updates. See execution_table rows 7-9 for 'update' behavior.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table row for batch 3 in 'append' mode. What rows are output to the sink?
A[{id:1, val:10}]
B[{id:1, val:15}]
C[{id:1, val:10}, {id:2, val:20}, {id:1, val:15}]
D[]
💡 Hint
Check the 'Output to Sink' column for batch 3 under 'append' mode in the execution_table.
At which batch does the 'complete' mode output include both id:1 and id:2 rows?
ABatch 1
BBatch 3
CBatch 2
DNever
💡 Hint
Look at the 'Output to Sink' column for 'complete' mode in execution_table rows 4-6.
If the output mode changes from 'append' to 'update', how does the output after batch 3 change?
AIt outputs new and updated rows only.
BIt outputs all rows seen so far.
CIt outputs only new rows, ignoring updates.
DIt outputs nothing.
💡 Hint
Compare 'append' and 'update' outputs in variable_tracker after batch 3.
Concept Snapshot
Output modes control how streaming data is written:
- append: add only new rows
- complete: replace all rows every batch
- update: add new and update changed rows
Choose mode based on sink and use case.
Append is simplest; complete and update handle changes.
Full Transcript
This lesson shows how Apache Spark streaming uses output modes to control data written to sinks. When new data arrives, Spark checks the output mode. In append mode, only new rows are added to the output. Complete mode replaces the entire output with all rows seen so far, including updates. Update mode outputs only new or changed rows, updating existing ones. The execution table traces batches of data arriving and how each mode outputs data differently. Variable tracking shows how output changes after each batch. Key moments clarify common confusions about how updates are handled differently by each mode. The visual quiz tests understanding by asking about outputs at specific batches and mode changes. The snapshot summarizes the modes and their behavior for quick reference.

Practice

(1/5)
1. Which output mode in Apache Spark streaming adds only new rows to the sink without updating existing rows?
easy
A. Update
B. Complete
C. Append
D. Overwrite

Solution

  1. Step 1: Understand output modes

    Append mode adds only new rows to the output sink without changing existing data.
  2. Step 2: Compare with other modes

    Complete mode outputs the entire result table, and Update mode outputs only changed rows.
  3. Final Answer:

    Append -> Option C
  4. Quick Check:

    Append = adds new rows only [OK]
Hint: Append means add new rows only, no updates [OK]
Common Mistakes:
  • Confusing append with complete mode
  • Thinking update mode adds only new rows
  • Assuming overwrite is an output mode
2. Which of the following is the correct syntax to set the output mode to 'complete' in a Spark Structured Streaming query?
easy
A. query.writeStream.outputMode("complete")
B. query.writeStream.mode("complete")
C. query.writeStream.setOutputMode("complete")
D. query.writeStream.output_mode("complete")

Solution

  1. Step 1: Recall Spark streaming syntax

    The correct method to set output mode is outputMode("mode_name") on writeStream.
  2. Step 2: Check options

    query.writeStream.outputMode("complete") uses outputMode("complete"), which is correct syntax. Others use incorrect method names or casing.
  3. Final Answer:

    query.writeStream.outputMode("complete") -> Option A
  4. Quick Check:

    outputMode("complete") is correct method [OK]
Hint: Use outputMode() method exactly as shown [OK]
Common Mistakes:
  • Using mode() instead of outputMode()
  • Using underscores instead of camelCase
  • Trying setOutputMode() which doesn't exist
3. Given the following code snippet, what will be the output mode behavior?
val query = df.writeStream
  .format("console")
  .outputMode("update")
  .start()
What does the 'update' mode do here?
medium
A. Overwrites the entire sink with new data
B. Outputs the entire result table every time
C. Outputs only new rows added since last trigger
D. Outputs only rows that have changed since last trigger

Solution

  1. Step 1: Understand 'update' mode meaning

    Update mode outputs only rows that have changed since the last trigger, not the full table.
  2. Step 2: Compare with other modes

    Append outputs only new rows, complete outputs full table, overwrite is not a streaming mode.
  3. Final Answer:

    Outputs only rows that have changed since last trigger -> Option D
  4. Quick Check:

    Update = changed rows only [OK]
Hint: Update mode shows changed rows only, not full or just new [OK]
Common Mistakes:
  • Confusing update with append mode
  • Thinking update outputs full table
  • Assuming overwrite is a streaming output mode
4. You wrote this Spark streaming code but get an error:
df.writeStream
  .format("console")
  .outputMode("append")
  .start()
The query fails because the DataFrame has aggregations. What is the error and how to fix it?
medium
A. Append mode not allowed with aggregations; use complete mode instead
B. Output mode 'append' is misspelled; fix spelling
C. Format 'console' does not support append mode; use 'memory' format
D. Start method missing awaitTermination(); add it

Solution

  1. Step 1: Identify cause of error

    Append mode cannot be used with aggregations because new rows alone can't be identified.
  2. Step 2: Fix by changing output mode

    Use complete mode to output full aggregation results instead of append.
  3. Final Answer:

    Append mode not allowed with aggregations; use complete mode instead -> Option A
  4. Quick Check:

    Aggregations require complete mode, not append [OK]
Hint: Aggregations need complete mode, not append [OK]
Common Mistakes:
  • Trying to fix by changing format instead of mode
  • Ignoring aggregation restrictions
  • Assuming spelling or method call errors
5. You have a streaming query with a stateful aggregation that updates counts per key. You want to output only the changed counts to a database sink that supports updates. Which output mode should you choose and why?
hard
A. Append mode, because it adds only new counts
B. Update mode, because it outputs only changed counts for efficient updates
C. Complete mode, because it outputs all counts every time
D. Overwrite mode, because it replaces all data in the sink

Solution

  1. Step 1: Understand the use case

    Stateful aggregation updates counts per key, so some counts change over time.
  2. Step 2: Choose output mode for efficient updates

    Update mode outputs only changed rows, ideal for sinks supporting updates to avoid full rewrites.
  3. Step 3: Exclude other modes

    Append mode can't handle updates, complete mode outputs full data (less efficient), overwrite replaces all data (not streaming mode).
  4. Final Answer:

    Update mode, because it outputs only changed counts for efficient updates -> Option B
  5. Quick Check:

    Update mode = changed rows only, best for stateful updates [OK]
Hint: Use update mode for stateful aggregation with update-capable sinks [OK]
Common Mistakes:
  • Choosing append mode for updates
  • Using complete mode causing full data writes
  • Confusing overwrite with streaming output mode
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