PySpark + Delta Lake / Apache Iceberg: Building Modern Lakehouse Data Pipelines

Introduction

Traditional data warehouses were designed for structured data and fixed schemas. Modern businesses generate massive amounts of data from applications, IoT devices, APIs, logs, and transactions.

To handle this scale, organizations are adopting the Lakehouse Architecture, which combines the flexibility of data lakes with the reliability of data warehouses.

Two major technologies powering modern lakehouses are:

  • Delta Lake
  • Apache Iceberg

When combined with PySpark, they provide a powerful platform for building scalable, reliable, and production-ready data pipelines.


What is PySpark?

PySpark is the Python API for Apache Spark, an open-source distributed processing engine.

It allows Data Engineers to process large datasets across multiple machines.

A typical PySpark pipeline:

Source Data
|
PySpark Transformation
|
Data Quality Checks
|
Delta Lake / Iceberg Table

Common PySpark operations:

  • Reading data
  • Data cleaning
  • Joins
  • Aggregations
  • Window functions
  • Complex transformations

Example:

from pyspark.sql import functions as F
df = spark.read.csv("customer.csv")
result = df.filter(
F.col("status") == "ACTIVE"
)
result.write.format("delta").save(
"/data/customer"
)

Why Do We Need Delta Lake or Iceberg?

A normal data lake stores files:

S3 / ADLS / GCS
customer/
part-001.parquet
part-002.parquet

But traditional data lakes have challenges:

Problem 1: No Transaction Support

Imagine two jobs writing at the same time.

Job A:

Write Customer Data

Job B:

Update Customer Data

Without transaction management:

  • Partial data writes
  • Corrupted files
  • Incorrect results

Problem 2: No Schema Control

Today:

customer_id
name
email

Tomorrow source adds:

phone_number

Without schema management, pipelines can fail.


Problem 3: No Historical Data Access

Business users often ask:

“Can we see the data as it was yesterday?”

Traditional files cannot easily answer this.


What is Delta Lake?

Delta Lake is an open-source storage layer built on top of Parquet files.

It adds:

  • ACID transactions
  • Schema enforcement
  • Schema evolution
  • Time travel
  • Data versioning
  • Optimization features

Architecture:

        Delta Table

Transaction Log
|


Parquet Files
|


Cloud Storage
(S3 / ADLS / GCS)

The important component is:

_delta_log

It maintains the history of table changes.


Delta Lake Example with PySpark

Creating Delta Table

df.write \
.format("delta") \
.mode("overwrite") \
.save("/customer_delta")

Now your data becomes a Delta table.


Reading Delta Table

delta_df = spark.read \
.format("delta") \
.load("/customer_delta")

Delta Lake Time Travel

One of the most powerful features.

Suppose:

Version 0:

Customer Count = 1000

After update:

Version 1:

Customer Count = 1200

You can access old data.

Using version:

old_data = spark.read \
.format("delta") \
.option("versionAsOf",0) \
.load("/customer_delta")

Use cases:

  • Auditing
  • Debugging
  • Data recovery

Schema Enforcement

Delta prevents incorrect data from entering tables.

Example:

Existing table:

customer_id INT
name STRING

Incoming data:

customer_id STRING

Delta can reject this because the schema is incompatible.


Schema Evolution

Sometimes new columns are expected.

Example:

Old schema:

customer_id
name

New schema:

customer_id
name
email

Enable evolution:

df.write \
.option("mergeSchema","true") \
.format("delta") \
.mode("append") \
.save(path)

For real-time data pipelines, Spark Structured Streaming is the modern approach for handling live data ingestion alongside batch.


Delta Lake Optimization

Large tables can become slow because of many small files.

Delta provides:

OPTIMIZE

Combines small files.

OPTIMIZE customer_table;

Z-Ordering

Improves query performance by organizing related data together.

Example:

OPTIMIZE customer
ZORDER BY (customer_id);

Useful for:

  • Frequently filtered columns
  • Large tables

VACUUM

Removes old unused files.

VACUUM customer_table;

Benefits:

  • Reduces storage cost
  • Cleans old files

What is Apache Iceberg?

Apache Iceberg is another open table format designed for huge analytical datasets.

It supports:

  • ACID transactions
  • Schema evolution
  • Partition evolution
  • Time travel
  • Multiple query engines

Architecture:

          Iceberg Table

|
Metadata Layer

|


Data Files
(Parquet / ORC)

|


Cloud Storage

Delta Lake vs Apache Iceberg

FeatureDelta LakeIceberg
Storage FormatParquetParquet
ACID TransactionsYesYes
Time TravelYesYes
Schema EvolutionYesYes
Partition EvolutionLimitedStrong
Spark SupportExcellentExcellent
Multi-engine SupportGoodExcellent

PySpark with Iceberg

Example:

df.writeTo(
"catalog.customer"
).using(
"iceberg"
).createOrReplace()

Read:

df = spark.read.table(
"catalog.customer"
)

Delta Lake vs Iceberg: When to Choose?

Choose Delta Lake When:

Example:

Databricks
|
PySpark
|
Delta Lake

Choose Iceberg When:

  • Multiple engines are involved
  • Using open-source ecosystem
  • Need broad compatibility

Example:

Spark
|
Trino
|
Flink
|
Iceberg

Real-World Data Engineering Architecture

Example:

 Data Sources

AWS S3
APIs
Databases
Streaming
|


Bronze Layer
(Raw Data)

|


Silver Layer
(PySpark Transformations)

|


Gold Layer
(Business Tables)

|


Delta Lake / Iceberg

|


BI Tools
Analytics
ML Models

Interview Questions

1. Why use Delta Lake instead of Parquet?

Answer:

“Parquet stores data efficiently, but Delta Lake adds transaction management, schema enforcement, versioning, and reliability.”


2. What is the purpose of _delta_log?

Answer:

“It stores transaction metadata and tracks table versions, enabling ACID transactions and time travel.”


3. Delta Lake vs Iceberg?

Answer:

“Both are open table formats providing reliability on data lakes. Delta Lake has strong Databricks integration, while Iceberg focuses on multi-engine interoperability.”


Conclusion

PySpark provides the processing power, while Delta Lake and Apache Iceberg provide reliability and management capabilities on top of data lakes.

Modern Data Engineers should understand:

✅ PySpark transformations
✅ Delta Lake transactions
✅ Time Travel
✅ Schema evolution
✅ Optimization techniques
✅ Iceberg architecture

These technologies form the foundation of today’s Lakehouse Architecture and are essential skills for Data Engineering roles.

Discover more from Srinimf

Subscribe now to keep reading and get access to the full archive.

Continue reading