📖 Scenario: You work at a company that receives live data about customer orders. You want to process this data as it arrives to get quick insights.
🎯 Goal: Build a simple Structured Streaming application in Apache Spark that reads streaming data from a folder, counts the number of orders per product, and displays the results.
📋 What You'll Learn
Create a streaming DataFrame reading JSON files from a folder
Define a query to count orders by product using Structured Streaming
Start the streaming query and display the output in the console
💡 Why This Matters
🌍 Real World
Companies use Structured Streaming to process live data like orders, sensor readings, or logs to get real-time insights.
💼 Career
Data engineers and data scientists use Structured Streaming to build pipelines that handle continuous data flows efficiently.
Progress0 / 4 steps
1
Create streaming DataFrame from JSON files
Create a streaming DataFrame called orders_stream that reads JSON files from the folder "/path/to/orders" using spark.readStream and .json().
Apache Spark
Hint
Use spark.readStream.json(path) to read streaming JSON data.
2
Define aggregation query to count orders by product
Create a streaming aggregation DataFrame called orders_count that groups orders_stream by the column product and counts the number of orders using .groupBy("product").count().
Apache Spark
Hint
Use groupBy("product").count() on the streaming DataFrame.
3
Start streaming query to output counts to console
Start a streaming query called query on orders_count that writes the output to the console using .writeStream.format("console").start().
Apache Spark
Hint
Use .writeStream.format("console").start() to start the query.
4
Print query status and stop the query
Print the current status of the streaming query query using print(query.status). Then stop the query using query.stop().
Apache Spark
Hint
Use print(query.status) to see the query status and query.stop() to stop it.
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
Step 1: Understand Structured Streaming concept
Structured Streaming is designed to handle data streams, meaning data that arrives continuously over time.
Step 2: Compare with other options
Batch processing handles static data, storing data is not the main function, and visualization is separate from streaming.
Final Answer:
To process live data continuously as it arrives -> Option D
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
Step 1: Identify streaming read syntax
To read streaming data, use readStream with format and load.
Step 2: Eliminate non-streaming options
read is for batch, writeStream is for output, so only readStream with load is correct.
Final Answer:
spark.readStream.format("json").load("path") -> Option B
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?
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
Step 1: Check writeStream requirements
In Structured Streaming, writeStream requires outputMode() (e.g., "append") to be specified before format() for sinks like console.
Step 2: Verify other parts
awaitTermination(10) accepts a timeout argument, format 'console' is correct lowercase, and start() must be called before awaitTermination().
Final Answer:
Missing option to specify output mode in writeStream -> Option A
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
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.
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.
Final Answer:
Read stream from socket, split lines into words, group by word, count, write stream to console -> Option A