Bird
Raised Fist0
Apache Sparkdata~10 mins

Structured Streaming basics in Apache Spark - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Structured Streaming basics
Start Streaming Query
↓
Read Input Stream
↓
Apply Transformations
↓
Write Output Stream
↓
Continuous Processing
↓
Stop Streaming Query
Structured Streaming reads data continuously, applies transformations, writes output, and keeps running until stopped.
Execution Sample
Apache Spark
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName('stream').getOrCreate()
input_stream = spark.readStream.format('socket').option('host', 'localhost').option('port', 9999).load()
words = input_stream.selectExpr('explode(split(value, " ")) as word')
query = words.writeStream.format('console').start()
query.awaitTermination()
This code reads text data from a socket, splits lines into words, and prints words to the console continuously.
Execution Table
StepActionInput DataTransformationOutput DataStatus
1Start Streaming QueryNo data yetInitialize streaming contextNo outputRunning
2Read Input StreamLine: 'hello world'Read line from socketDataFrame with 1 row: 'hello world'Running
3Apply TransformationDataFrame with 'hello world'Split line into wordsDataFrame with rows: 'hello', 'world'Running
4Write Output StreamDataFrame with wordsPrint to consoleConsole shows 'hello' and 'world'Running
5Read Input StreamLine: 'spark streaming'Read line from socketDataFrame with 1 row: 'spark streaming'Running
6Apply TransformationDataFrame with 'spark streaming'Split line into wordsDataFrame with rows: 'spark', 'streaming'Running
7Write Output StreamDataFrame with wordsPrint to consoleConsole shows 'spark' and 'streaming'Running
8Stop Streaming QueryN/AStop queryNo outputStopped
💡 Streaming query stopped by user or program
Variable Tracker
VariableStartAfter Step 2After Step 3After Step 4After Step 5After Step 6After Step 7Final
input_streamempty'hello world''hello world''hello world''spark streaming''spark streaming''spark streaming'final state
wordsemptyempty['hello', 'world']['hello', 'world']['hello', 'world']['spark', 'streaming']['spark', 'streaming']final state
query.statusnot startedrunningrunningrunningrunningrunningrunningstopped
Key Moments - 3 Insights
Why does the streaming query keep running after processing some data?
Because Structured Streaming is designed to run continuously, it waits for new data until explicitly stopped, as shown in steps 1 to 7 in the execution_table.
What happens if no new data arrives in the input stream?
The streaming query stays active but does not output new data until new input arrives, as the status remains 'Running' without new output rows.
Why do we use 'awaitTermination()' at the end?
'awaitTermination()' keeps the program running to allow continuous processing, preventing the program from exiting immediately after starting the stream.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table at Step 3, what transformation is applied to the input data?
AWriting data to console
BReading data from socket
CSplitting the line into words
DStopping the query
💡 Hint
Check the 'Transformation' column at Step 3 in the execution_table.
At which step does the streaming query stop running?
AStep 4
BStep 8
CStep 7
DStep 2
💡 Hint
Look at the 'Status' column in the execution_table for the step where status changes to 'Stopped'.
If the input stream receives no new data after Step 7, what will be the query status?
ARunning but no new output
BStopped
CError
DIdle and closed
💡 Hint
Refer to the key moment about query behavior when no new data arrives.
Concept Snapshot
Structured Streaming reads data continuously from a source.
It applies transformations like splitting or filtering.
Results are written to a sink like console or file.
The query runs continuously until stopped.
Use 'awaitTermination()' to keep the program running.
Ideal for real-time data processing.
Full Transcript
Structured Streaming in Apache Spark allows you to process data continuously as it arrives. You start a streaming query that reads data from a source, applies transformations such as splitting lines into words, and writes the results to an output sink like the console. The streaming query keeps running, waiting for new data, until you stop it manually. The method 'awaitTermination()' is used to keep the program running so the streaming can continue. This approach is useful for real-time data processing where data flows in continuously.

Practice

(1/5)
1. What is the main purpose of Structured Streaming in Apache Spark?
easy
A. To visualize data using charts and graphs
B. To batch process large static datasets
C. To store data permanently in a database
D. To process live data continuously as it arrives

Solution

  1. Step 1: Understand Structured Streaming concept

    Structured Streaming is designed to handle data streams, meaning data that arrives continuously over time.
  2. Step 2: Compare with other options

    Batch processing handles static data, storing data is not the main function, and visualization is separate from streaming.
  3. Final Answer:

    To process live data continuously as it arrives -> Option D
  4. Quick Check:

    Structured Streaming = continuous live data processing [OK]
Hint: Streaming means live, continuous data processing [OK]
Common Mistakes:
  • Confusing streaming with batch processing
  • Thinking streaming stores data permanently
  • Assuming streaming is for visualization
2. Which of the following is the correct way to start reading a streaming DataFrame in Spark?
easy
A. spark.read.format("json").load("path")
B. spark.readStream.format("json").load("path")
C. spark.writeStream.format("json").load("path")
D. spark.write.format("json").load("path")

Solution

  1. Step 1: Identify streaming read syntax

    To read streaming data, use readStream with format and load.
  2. Step 2: Eliminate non-streaming options

    read is for batch, writeStream is for output, so only readStream with load is correct.
  3. Final Answer:

    spark.readStream.format("json").load("path") -> Option B
  4. Quick Check:

    Streaming read uses readStream [OK]
Hint: Use readStream to read streaming data [OK]
Common Mistakes:
  • Using read instead of readStream for streaming data
  • Confusing writeStream with readStream
  • Using writeStream with load instead of start
3. Given the code below, what will be the output schema of the streaming DataFrame?
df = spark.readStream.format("csv").option("header", "true").load("/data/clicks")
df.printSchema()
medium
A. Schema with columns inferred as integers only
B. Schema with no columns because streaming can't infer schema
C. Schema with columns inferred from CSV header as strings
D. Error because schema must be specified explicitly

Solution

  1. Step 1: Understand schema inference in streaming CSV

    When reading CSV with header option true, Spark infers schema as strings by default for streaming.
  2. Step 2: Check if explicit schema is required

    Explicit schema is recommended but not mandatory; Spark infers schema as string types if not provided.
  3. Final Answer:

    Schema with columns inferred from CSV header as strings -> Option C
  4. Quick Check:

    CSV header + streaming = inferred string schema [OK]
Hint: CSV header enables schema inference as strings [OK]
Common Mistakes:
  • Assuming streaming can't infer schema
  • Expecting integer types without schema
  • Thinking explicit schema is always required
4. Identify the error in the following Structured Streaming code:
streamDF = spark.readStream.format("json").load("/data/events")
query = streamDF.writeStream.format("console").start()
query.awaitTermination(10)
medium
A. Missing option to specify output mode in writeStream
B. awaitTermination does not take any arguments
C. Incorrect format 'console' should be 'Console'
D. start() must be called after awaitTermination()

Solution

  1. Step 1: Check writeStream requirements

    In Structured Streaming, writeStream requires outputMode() (e.g., "append") to be specified before format() for sinks like console.
  2. Step 2: Verify other parts

    awaitTermination(10) accepts a timeout argument, format 'console' is correct lowercase, and start() must be called before awaitTermination().
  3. Final Answer:

    Missing option to specify output mode in writeStream -> Option A
  4. Quick Check:

    writeStream requires outputMode [OK]
Hint: writeStream requires outputMode [OK]
Common Mistakes:
  • Missing outputMode in writeStream
  • Thinking awaitTermination does not take timeout
  • Misusing start and awaitTermination order
5. You want to count the number of words in a live stream of text lines from a socket source. Which sequence of operations correctly applies Structured Streaming to achieve this?
hard
A. Read stream from socket, split lines into words, group by word, count, write stream to console
B. Read batch from socket, split lines into words, group by word, count, write batch to file
C. Read stream from socket, count lines directly, write stream to console
D. Read stream from socket, split lines into words, filter empty words, write batch to console

Solution

  1. Step 1: Understand streaming word count steps

    Streaming word count requires reading live data, splitting lines into words, grouping by word, and counting occurrences continuously.
  2. Step 2: Check options for correctness

    Read stream from socket, split lines into words, group by word, count, write stream to console follows the correct streaming steps with writeStream to console. Read batch from socket, split lines into words, group by word, count, write batch to file uses batch, not streaming. Read stream from socket, count lines directly, write stream to console counts lines, not words. Read stream from socket, split lines into words, filter empty words, write batch to console writes batch, not stream, and misses counting.
  3. Final Answer:

    Read stream from socket, split lines into words, group by word, count, write stream to console -> Option A
  4. Quick Check:

    Streaming word count = readStream + split + groupBy + count + writeStream [OK]
Hint: For streaming word count, use readStream + groupBy + count + writeStream [OK]
Common Mistakes:
  • Using batch read instead of streaming
  • Counting lines instead of words
  • Writing batch output instead of streaming
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