Parquet format and columnar storage in Apache Spark - Time & Space Complexity
We want to understand how reading data stored in Parquet format grows as the data size increases.
How does the columnar storage affect the time it takes to read specific columns?
Analyze the time complexity of the following Apache Spark code reading Parquet data.
df = spark.read.parquet("/data/events.parquet")
selected_df = df.select("user_id", "event_type")
result = selected_df.filter(selected_df.event_type == "click").collect()
This code reads a Parquet file, selects two columns, filters rows where event_type is "click", and collects the results.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Scanning rows in the Parquet file to filter and select columns.
- How many times: Once for each row in the dataset.
Reading and filtering grows roughly in proportion to the number of rows because each row is checked once.
| Input Size (n rows) | Approx. Operations |
|---|---|
| 10 | About 10 row checks |
| 100 | About 100 row checks |
| 1000 | About 1000 row checks |
Pattern observation: The work grows linearly as the number of rows increases.
Time Complexity: O(n)
This means the time to read and filter grows directly with the number of rows in the data.
[X] Wrong: "Because Parquet is columnar, reading any column is always constant time regardless of data size."
[OK] Correct: Even though Parquet stores columns separately, reading a column still requires scanning all rows in that column, so time grows with the number of rows.
Understanding how columnar storage affects data reading helps you explain performance in real data tasks clearly and confidently.
"What if we only read a small subset of columns from a very wide Parquet file? How would the time complexity change?"
Practice
Solution
Step 1: Understand Parquet storage method
Parquet stores data in a columnar format, meaning data is saved column by column instead of row by row.Step 2: Benefits of columnar storage
This column-wise storage allows faster queries on specific columns and reduces storage size due to better compression.Final Answer:
It stores data column-wise, making queries faster and storage smaller. -> Option DQuick Check:
Columnar storage = faster queries + smaller files [OK]
- Thinking Parquet stores data as plain text
- Confusing row-wise with column-wise storage
- Assuming Parquet only stores in memory
df as a Parquet file?Solution
Step 1: Recall Spark DataFrame write syntax
In Spark, to save a DataFrame as Parquet, use thewrite.parquet()method.Step 2: Check each option
df.write.parquet('path/to/file') usesdf.write.parquet('path'), which is correct. Others use incorrect methods or formats.Final Answer:
df.write.parquet('path/to/file') -> Option BQuick Check:
Use write.parquet() to save DataFrame [OK]
- Using saveAsParquet which does not exist
- Saving with wrong format like CSV
- Using df.save() without write
df.write.parquet('data.parquet')
df2 = spark.read.parquet('data.parquet')
df2.printSchema()Solution
Step 1: Understand Parquet schema storage
Parquet files store both data and schema (column names and types).Step 2: Loading Parquet preserves schema
When reading withspark.read.parquet(), the schema is restored exactly as saved.Final Answer:
The schema will be the same as the original DataFramedf. -> Option AQuick Check:
Parquet stores schema = schema preserved [OK]
- Thinking Parquet files do not store schema
- Assuming schema is lost or incomplete
- Believing schema order changes on read
spark.read.parquet('file_path') but get an error. Which of the following is the most likely cause?Solution
Step 1: Check common read errors
Errors reading Parquet usually happen if the file path is wrong or file is missing.Step 2: Verify other options
Parquet files are supported by Spark, so B and C are wrong. D is unrelated because reading does not depend on saving in the same session.Final Answer:
The file path is incorrect or the file does not exist. -> Option AQuick Check:
File not found = read error [OK]
- Assuming Spark cannot read Parquet
- Using wrong read method like read.csv
- Thinking saving is required in same session
Solution
Step 1: Recall Parquet columnar storage benefits
Parquet stores data column-wise, allowing queries to read only selected columns.Step 2: Understand impact on performance
Reading fewer columns reduces disk I/O and speeds up queries, especially on large datasets.Final Answer:
Parquet stores data column-wise, so reading only needed columns is faster and uses less disk I/O. -> Option CQuick Check:
Columnar storage = selective fast reads [OK]
- Thinking Parquet stores data row-wise
- Believing Parquet converts data to JSON
- Assuming Parquet removes nulls automatically
Ready to prove it?
Pass the test and this pattern moves unknown
