Skip to main content
πŸ“˜ Complete PDF

PySpark Certification Practice Test 05

Production Project Walkthrough Scenarios

Question 1 of 20
πŸ“‹ Multiple Choice
Question 81
A newly joined Data Engineer at a retail enterprise receives daily sales transaction batches from 2,000 stores. The incoming data contains duplicate transaction records because network timeouts frequently cause store POS terminals to retry uploads. Before loading records into the Gold analytical layer, management requires strictly unique transactions. What should be implemented FIRST?
A. Cache the raw DataFrame in memory across all executor nodes
βœ“
B. Deduplication Logic using `dropDuplicates(['transaction_id', 'store_id'])`
C. Broadcast Hash Join against store dimension tables
D. Repartition the dataset into 10,000 partitions
Answer
βœ… B. Deduplication Logic using `dropDuplicates(['transaction_id', 'store_id'])`
Explanation

1. Core Concept Overview Idempotent pipeline design requires deterministic deduplication before loading analytical data. PySpark provides `dropDuplicates()` to eliminate duplicate records based on primary composite keys.

2. Step-by-Step Technical Breakdown - **Option B is Correct:** `dropDuplicates(['transaction_id', 'store_id'])` or `row_number().over(Window.partitionBy('transaction_id').orderBy(col('timestamp').desc()))` ensures that duplicate transaction transmissions are filtered out deterministically. - **Option A is Incorrect:** Caching raw duplicates consumes memory and preserves duplicate records rather than fixing them. - **Option C is Incorrect:** Broadcast joins optimize lookups against small tables; they do not remove duplicate rows. - **Option D is Incorrect:** Repartitioning redistributes data across cluster partitions but does not remove duplicate records.

3. Why Other Options Are Incorrect - **A preserves duplicates in RAM**, wasting memory without solving the business requirement. - **C is a join optimization technique**, not a data cleansing operation. - **D changes partition distribution**, but retains all duplicate rows.

4. Architecture & Platform Execution Under the hood, `dropDuplicates([subset])` introduces a wide transformation requiring a shuffle exchange. Spark hashes the subset keys, groups matching records to the same executor partition, and drops subsequent duplicate rows within each key partition.

5. Practical Code Example

from pyspark.sql import SparkSession
from pyspark.sql.functions import col
from pyspark.sql.window import Window
from pyspark.sql.functions import row_number

spark = SparkSession.builder.appName("StoreDeduplication").getOrCreate()

raw_sales = spark.read.parquet("s3://retail-bronze/pos_sales/2025/01/15/")

# Approach 1: Native dropDuplicates
deduped_sales = raw_sales.dropDuplicates(["store_id", "transaction_id"])

# Approach 2: Window-based deduplication taking most recent record
window_spec = Window.partitionBy("store_id", "transaction_id").orderBy(col("pos_timestamp").desc())
clean_sales = raw_sales.withColumn("rk", row_number().over(window_spec)) \
                       .filter(col("rk") == 1) \
                       .drop("rk")

clean_sales.write.mode("overwrite").parquet("s3://retail-silver/sales_clean/")

6. Key Takeaway Eliminate duplicate transmissions using `dropDuplicates()` or Window ranking over composite primary keys before loading data into downstream silver/gold layers.

7. Best Practice & Production Recommendation Always specify the key column subset in `dropDuplicates(subset=['key'])`. Invoking `dropDuplicates()` without arguments compares every column, causing unnecessary shuffle serialization overhead.

8. Real-World Engineering Scenario Store POS terminals experienced an intermittent internet outage on Black Friday, retransmitting 4.5 million identical transaction files. The deduplication layer successfully filtered out 1.8 million duplicate transactions, preventing an $85M revenue double-count in financial reporting.

9. Common Exam Trap / Anti-Pattern / Misconception Calling `distinct()` or `dropDuplicates()` without arguments. Comparing 50 columns across billions of rows creates massive shuffle spill; only compare business primary keys.

10. Related InsightfulSaga Tutorial Master these concepts in [PySpark Production Engineering](/tutorials/pyspark/pyspark-filtering).

Answered: 0 / 20
Question Navigator (Test 05)0% Answered