📖 Scenario: You work as a data analyst for a retail company. You have a large dataset of sales transactions. You want to speed up repeated analysis by storing the data in memory or on disk.
🎯 Goal: Learn how to cache and persist a Spark DataFrame to improve performance for repeated queries.
📋 What You'll Learn
Create a Spark DataFrame with sales data
Set a cache or persist configuration
Apply caching or persistence to the DataFrame
Show the cached or persisted DataFrame output
💡 Why This Matters
🌍 Real World
Caching and persistence help speed up repeated data analysis tasks by storing data in memory or on disk, reducing computation time.
💼 Career
Data engineers and data scientists use caching and persistence in Spark to optimize performance of big data pipelines and interactive queries.
Progress0 / 4 steps
1
Create the sales DataFrame
Create a Spark DataFrame called sales_df with these exact rows: ("2024-01-01", "Alice", 100), ("2024-01-02", "Bob", 150), and ("2024-01-03", "Charlie", 200). Use columns named date, customer, and amount.
Apache Spark
Hint
Use spark.createDataFrame with a list of tuples and a list of column names.
2
Set the cache configuration
Create a variable called cache_enabled and set it to True to indicate caching is enabled.
Apache Spark
Hint
Just create a variable named cache_enabled and assign True.
3
Apply caching to the DataFrame
Use an if statement to check if cache_enabled is True. If yes, call cache() on sales_df and assign it back to sales_df.
Apache Spark
Hint
Use if cache_enabled: and then sales_df = sales_df.cache().
4
Show the cached DataFrame
Use sales_df.show() to display the contents of the cached DataFrame.
Apache Spark
Hint
Use sales_df.show() to print the DataFrame.
Practice
(1/5)
1. What is the main purpose of using cache() in Apache Spark?
easy
A. To delete data from memory
B. To permanently save data to disk
C. To store data in memory for faster repeated access
D. To convert data into a different format
Solution
Step 1: Understand what caching means in Spark
Caching stores data in memory to speed up repeated operations on the same data.
Step 2: Identify the role of cache()
The cache() method specifically stores the DataFrame or RDD in memory for quick access.
Final Answer:
To store data in memory for faster repeated access -> Option C
Quick Check:
Caching = store in memory [OK]
Hint: Cache means keep data in memory for speed [OK]
Common Mistakes:
Thinking cache saves data permanently on disk
Confusing cache with deleting data
Assuming cache changes data format
2. Which of the following is the correct syntax to persist a DataFrame df with disk storage level in Spark?
easy
A. df.persist(StorageLevel.DISK_ONLY)
B. df.cache(StorageLevel.DISK_ONLY)
C. df.persist('disk_only')
D. df.cache('disk_only')
Solution
Step 1: Recall the correct method to specify storage level
To persist with a specific storage level, use persist() with a StorageLevel object.
Step 2: Check the syntax for disk-only persistence
The correct syntax is df.persist(StorageLevel.DISK_ONLY). The cache() method does not accept parameters.
Hint: Use persist() with StorageLevel, cache() has no params [OK]
Common Mistakes:
Using cache() with parameters
Passing storage level as string instead of StorageLevel object
Using persist() without StorageLevel
3. Consider the following Spark code snippet:
val df = spark.read.csv("data.csv")
df.cache()
df.count()
df.count()
What is the effect of calling df.count() twice after caching?
medium
A. Both counts reload data from disk without caching
B. The first count triggers data loading and caching; the second count uses cached data for faster result
C. The second count triggers caching; the first count uses cached data
D. Both counts use cached data without loading from disk
Solution
Step 1: Understand caching behavior on first action
The first action (count()) triggers loading data and caches it in memory.
Step 2: Effect on second action
The second count() uses the cached data, so it runs faster without reloading from disk.
Final Answer:
The first count triggers data loading and caching; the second count uses cached data for faster result -> Option B
Quick Check:
First action caches, second uses cache [OK]
Hint: First action caches, second action reads cache [OK]
Common Mistakes:
Assuming cache happens before first action
Thinking both counts reload from disk
Believing second count triggers caching
4. Given this Spark code:
val df = spark.read.json("data.json")
df.persist(StorageLevel.MEMORY_AND_DISK)
df.unpersist()
What is the main issue with this code?
medium
A. Calling unpersist() immediately removes cached data, so persistence is ineffective
B. The persist() method requires a string, not StorageLevel object
C. You must call cache() before persist()
D. The code will cause a syntax error due to missing parentheses
Solution
Step 1: Understand the effect of persist()
The persist() call stores the DataFrame in memory and disk as specified.
Step 2: Effect of immediate unpersist()
Calling unpersist() right after removes the cached data, negating the persistence benefit.
Final Answer:
Calling unpersist() immediately removes cached data, so persistence is ineffective -> Option A
Quick Check:
Immediate unpersist clears cache [OK]
Hint: Unpersist right after persist clears cache [OK]
Common Mistakes:
Thinking persist needs string argument
Believing cache must be called before persist
Assuming syntax error due to parentheses
5. You have a large DataFrame df used multiple times in your Spark job. You want to cache it but ensure it uses memory first and spills to disk if memory is full. Which persistence level should you use and why?
hard
A. Use df.persist(StorageLevel.DISK_ONLY) to avoid memory usage
B. Use df.cache() because it automatically spills to disk
C. Use df.unpersist() to keep data only in memory
D. Use df.persist(StorageLevel.MEMORY_AND_DISK) to store in memory and spill to disk if needed
Solution
Step 1: Identify persistence levels for memory and disk
StorageLevel.MEMORY_AND_DISK stores data in memory and spills to disk if memory is insufficient.
Step 2: Compare with other options
cache() only stores in memory and may fail if memory is full; DISK_ONLY avoids memory; unpersist() removes cached data.
Final Answer:
Use df.persist(StorageLevel.MEMORY_AND_DISK) to store in memory and spill to disk if needed -> Option D
Quick Check:
MEMORY_AND_DISK = memory first, then disk spill [OK]
Hint: MEMORY_AND_DISK spills to disk if memory full [OK]
Common Mistakes:
Assuming cache spills to disk automatically
Choosing DISK_ONLY to save memory but slower
Using unpersist to keep data cached
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.