beginner
Writing Streams
8 min readLast updated: 2026-07-09
Overview
Learn how to define streaming outputs (sinks), configure output modes, and start streaming queries.
What You Will Learn
In this lesson, you will learn:
- writeStream API: Setting output configurations.
- Console Sink: Writing streams to stdout for debugging.
- Query Lifecycle: Starting queries and waiting for termination.
Detailed Concept Explanation
A streaming query runs in the background. To start the query, you call writeStream on a streaming DataFrame, specify the destination format, and call .start().
Common Sinks
console: Prints outputs to stdout, used for debugging.memory: Saves records into an in-memory table that can be queried using standard SQL.parquet/csv/json: Saves records directly to files on disk. Requires checkpointing.
To prevent your driver script from exiting immediately after starting the query, call .awaitTermination().
Code Examples
Python (PySpark) Implementation
python
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("WriteStream").getOrCreate()
# Create rate source stream
rate_df = spark.readStream.format("rate").load()
# Start streaming query and output to console
query = rate_df.writeStream \
.format("console") \
.outputMode("append") \
.start()
# Wait 5 seconds, then stop query
query.awaitTermination(5)
query.stop()
Expected Output
text
+-------------------+-----+
| timestamp|value|
+-------------------+-----+
|2026-07-09 19:30:00| 1|
+-------------------+-----+
Execution Plan Diagram (Python & Scala)
Execution Plan Diagram
SparkSession.builder
readStream.format(rate)
load()
writeStream.format(console)
outputMode(append)
start()
awaitTermination(5)
stop()
Scala Implementation
scala
import org.apache.spark.sql.SparkSession
val spark = SparkSession.builder().appName("WriteStreamScala").getOrCreate()
val rateDF = spark.readStream.format("rate").load()
val query = rateDF.writeStream
.format("console")
.outputMode("append")
.start()
query.awaitTermination(5000)
query.stop()
Expected Output
text
+-------------------+-----+
| timestamp|value|
+-------------------+-----+
|2026-07-09 19:30:00| 1|
+-------------------+-----+
Common Mistakes
- Forgetting to Call start(): Calling
.writeStream.format("console")without calling.start(). Spark will not initialize the query or process any data.
Best Practices
- Always specify checkpointLocation: Except for console and memory sinks, always set
checkpointLocationwhen writing to storage to enable query recovery.