advanced
Tungsten Engine
10 min readLast updated: 2026-07-09
Overview
Tungsten is Spark's physical execution optimizer. Learn how it bypasses Java object overheads, manages off-heap memory, and speeds up computation.
What You Will Learn
In this lesson, you will learn:
- Memory Management: Off-heap memory layout and binary formatting.
- Whole-Stage Code Generation: Compiling multiple stages into single execution functions.
- Cache-aware Computation: Structuring memory grids for CPU L1/L2 caches.
Detailed Concept Explanation
While Catalyst focuses on logical optimization, Tungsten optimizes physical CPU and memory layouts.
Key Optimization Pillars
- Binary Row Format: Java objects carry massive memory overheads (e.g. a simple 4-byte integer string can take up to 24 bytes of JVM metadata). Tungsten stores rows as compact, raw binary bytes, reducing memory usage and saving garbage collection cycles.
- Off-Heap Memory Management: Bypasses the standard JVM garbage collector by managing allocations directly in off-heap memory arrays.
- Whole-Stage Code Generation: Collapses multiple physical plans (e.g. scanning, filtering, and projecting) into a single, clean Java function, eliminating virtual method calls and keeping data in CPU registers.
Code Examples
Python (PySpark) Implementation
python
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("Tungsten").getOrCreate()
# A query that Catalyst/Tungsten collapses into a single function
df = spark.range(1, 1000000)
result = df.filter(df.id % 2 == 0).selectExpr("id * 2")
# Codegen is represented in explain plan by star symbol (*)
result.explain()
Expected Output
text
== Physical Plan ==
*(1) Project [(id#0L * 2) AS (id * 2)#2L]
+- *(1) Filter ((id#0L % 2) = 0)
+- *(1) Range (1, 1000000, step=1, splits=2)
Execution Plan Diagram (Python & Scala)
Execution Plan Diagram
SparkSession.builder
range(1
1M)
filter(id % 2 == 0)
selectExpr(id * 2)
explain()
Scala Implementation
scala
import org.apache.spark.sql.SparkSession
val spark = SparkSession.builder().appName("TungstenScala").getOrCreate()
val df = spark.range(1, 1000000)
val result = df.filter($"id" % 2 === 0).selectExpr("id * 2")
result.explain()
Interview Perspective
What is Whole-Stage Code Generation in Spark?
Whole-Stage Code Generation is a Tungsten optimizer feature that compiles multiple physical query steps (like scan, filter, and project) into a single Java function at runtime. This removes virtual method calls between operators, avoids caching intermediate states, and keeps data in CPU registers, resulting in performance close to hand-written code.