advanced
Serialization
8 min readLast updated: 2026-07-09
Overview
Learn how serialization formats affect Spark query speeds, and configure Kryo Serialization to optimize network data transfers.
What You Will Learn
In this lesson, you will learn:
- Data Serialization: Converting objects into byte streams for storage and network transfer.
- Java Serializer: The default Java serialization format.
- Kryo Serializer: A compact, high-performance serialization format.
Detailed Concept Explanation
Whenever Spark shuffles data across worker nodes or spills partitions to disk, it must convert Java objects into byte streams. This process is called Serialization.
Serializer Options
- Java Serializer (Default): Uses standard Java Object Serialization. It is flexible and easy to use but produces large, bloated byte payloads, wasting network bandwidth.
- Kryo Serializer: A compact serialization framework. It is 10x faster and produces up to 4x smaller payloads than Java serialization, saving significant network I/O.
To enable Kryo, you configure it in the Spark session:
spark.serializer = org.apache.spark.serializer.KryoSerializer
Code Examples
Python (PySpark) Configuration
python
from pyspark.sql import SparkSession
# Configure Kryo serialization
spark = SparkSession.builder \
.appName("KryoTest") \
.config("spark.serializer", "org.apache.spark.serializer.KryoSerializer") \
.config("spark.kryoserializer.buffer.max", "64m") \
.getOrCreate()
df = spark.range(1, 1000).repartition(10)
df.collect()
Execution Plan Diagram (Python & Scala)
Execution Plan Diagram
SparkSession.builder
config(spark.serializer
KryoSerializer)
range(1
1000)
repartition(10)
collect()
Scala Configuration
scala
import org.apache.spark.sql.SparkSession
val spark = SparkSession.builder()
.appName("KryoScala")
.config("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
.config("spark.kryoserializer.buffer.max", "64m")
.getOrCreate()
val df = spark.range(1, 1000).repartition(10)
df.collect()