Bird
Raised Fist0
Apache Sparkdata~10 mins

Handling data skew at scale in Apache Spark - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to repartition the DataFrame to reduce data skew.

Apache Spark
df = df.[1](numPartitions=10)
Drag options to blanks, or click blank then click option'
Aselect
Bfilter
Crepartition
DgroupBy
Attempts:
3 left
💡 Hint
Common Mistakes
Using groupBy instead of repartition causes shuffles but not necessarily balanced partitions.
Using filter or select does not change data distribution.
2fill in blank
medium

Complete the code to add a random salt column to the DataFrame to help with skew.

Apache Spark
from pyspark.sql.functions import rand

df = df.withColumn('salt', (rand() * [1]).cast('int'))
Drag options to blanks, or click blank then click option'
A1000
B10
C100
D5
Attempts:
3 left
💡 Hint
Common Mistakes
Using too few salt buckets may not reduce skew effectively.
Using too many salt buckets can increase shuffle overhead.
3fill in blank
hard

Fix the error in the join to handle skew by joining on salted keys.

Apache Spark
from pyspark.sql.functions import rand

df1 = df1.withColumn('salt', (rand() * 10).cast('int'))
df2 = df2.withColumn('salt', (rand() * 10).cast('int'))

joined = df1.join(df2, ['key', [1]])
Drag options to blanks, or click blank then click option'
A'salt'
B'random'
C'salted_key'
D'skew_key'
Attempts:
3 left
💡 Hint
Common Mistakes
Joining only on 'key' ignores the salt and causes skew.
Using wrong column names causes join errors.
4fill in blank
hard

Fill both blanks to create a salted key and join on it to handle skew.

Apache Spark
from pyspark.sql.functions import concat, col, lit

df1 = df1.withColumn('salted_key', concat(col('key'), lit('_'), col([1]).cast('string')))
df2 = df2.withColumn('salted_key', concat(col('key'), lit('_'), col([2]).cast('string')))

joined = df1.join(df2, 'salted_key')
Drag options to blanks, or click blank then click option'
Asalt
Brandom
Dskew
Attempts:
3 left
💡 Hint
Common Mistakes
Using different column names for salt in each DataFrame.
Not casting salt to string before concatenation.
5fill in blank
hard

Fill both blanks to create a dictionary of word lengths for words longer than 3 characters.

Apache Spark
lengths = {word: [1] for word in words if len(word) [2] 3}
Drag options to blanks, or click blank then click option'
A:
Blen(word)
C>
D<
Attempts:
3 left
💡 Hint
Common Mistakes
Using '<' instead of '>' filters wrong words.
Missing colon causes syntax error.
Using word instead of len(word) as value.

Practice

(1/5)
1. What is the main problem caused by data skew in Apache Spark jobs?
easy
A. Some tasks become much larger and slower than others
B. All tasks run equally fast
C. Data is lost during processing
D. Spark automatically fixes skew without user action

Solution

  1. Step 1: Understand data skew impact

    Data skew means some keys have many more records, causing uneven task sizes.
  2. Step 2: Identify effect on tasks

    Tasks processing large keys take longer, slowing the whole job.
  3. Final Answer:

    Some tasks become much larger and slower than others -> Option A
  4. Quick Check:

    Data skew = uneven task sizes [OK]
Hint: Data skew means uneven task sizes slowing jobs [OK]
Common Mistakes:
  • Thinking all tasks run equally fast
  • Believing Spark fixes skew automatically
  • Confusing data loss with skew
2. Which of the following is the correct way to add a salt key to a DataFrame column named user_id in PySpark?
easy
A. df.withColumn('salted_key', concat(col('user_id'), lit('_'), rand()))
B. df.withColumn('salted_key', col('user_id') + rand())
C. df.withColumn('salted_key', col('user_id').cast('int'))
D. df.withColumn('salted_key', col('user_id').substr(0, 3))

Solution

  1. Step 1: Understand salting technique

    Salting adds a random value to the key to spread data across partitions.
  2. Step 2: Check correct syntax for salting

    Concatenating user_id with a random number as string is correct.
  3. Final Answer:

    df.withColumn('salted_key', concat(col('user_id'), lit('_'), rand())) -> Option A
  4. Quick Check:

    Salting = concat key + random [OK]
Hint: Use concat with random value to salt keys [OK]
Common Mistakes:
  • Adding random float directly to string key
  • Casting key without salting
  • Using substring instead of salting
3. Given the following PySpark code snippet to reduce skew by salting, what will be the output count of salted_df if df has 1000 rows?
from pyspark.sql.functions import col, concat, lit, rand
salted_df = df.withColumn('salted_key', concat(col('key'), lit('_'), (rand() * 10).cast('int')))
count = salted_df.count()
medium
A. 0
B. 1000
C. 10
D. 100

Solution

  1. Step 1: Understand salting effect on row count

    Salting adds a new column but does not change the number of rows.
  2. Step 2: Count rows after salting

    The count remains the same as original DataFrame, 1000 rows.
  3. Final Answer:

    1000 -> Option B
  4. Quick Check:

    Salting adds column, count unchanged [OK]
Hint: Salting adds column, row count stays same [OK]
Common Mistakes:
  • Thinking salting duplicates rows
  • Confusing salt range with row count
  • Assuming count changes after withColumn
4. You have a join in Spark that is very slow due to data skew on the join key. Which of the following code snippets correctly applies salting to both DataFrames to fix the skew?
df1_salted = df1.withColumn('salt', (rand() * 5).cast('int'))
df2_salted = df2.withColumn('salt', (rand() * 5).cast('int'))
joined = df1_salted.join(df2_salted, ['key', 'salt'])
medium
A. Incorrect: salting with fixed value instead of random
B. Incorrect: salting only one DataFrame
C. Incorrect: joining without salt column
D. Correct: salting both sides and joining on key and salt

Solution

  1. Step 1: Understand salting for joins

    To fix skew, salt both DataFrames on join key with same salt range.
  2. Step 2: Verify join condition

    Joining on both original key and salt column ensures balanced partitions.
  3. Final Answer:

    Correct: salting both sides and joining on key and salt -> Option D
  4. Quick Check:

    Salt both sides + join on key & salt [OK]
Hint: Salt both DataFrames and join on key plus salt [OK]
Common Mistakes:
  • Salting only one DataFrame
  • Joining without salt column
  • Using fixed salt value instead of random
5. You have a Spark job with a very large skewed key causing one partition to be huge. You want to reduce skew by salting and also control shuffle partitions. Which approach below best balances load and parallelism?
hard
A. Add salt column but keep shuffle partitions very low
B. Do not add salt, just increase shuffle partitions
C. Add a salt column with random values, join on salted keys, and increase shuffle partitions
D. Add salt column with fixed value and reduce shuffle partitions

Solution

  1. Step 1: Apply salting to spread skewed key

    Adding a salt column with random values breaks large groups into smaller ones.
  2. Step 2: Adjust shuffle partitions to increase parallelism

    Increasing shuffle partitions allows more tasks to run in parallel, reducing bottlenecks.
  3. Step 3: Combine salting and partition tuning

    Both salting and increasing partitions together balance load and improve job speed.
  4. Final Answer:

    Add a salt column with random values, join on salted keys, and increase shuffle partitions -> Option C
  5. Quick Check:

    Salt + more partitions = balanced load [OK]
Hint: Salt keys and increase shuffle partitions for best balance [OK]
Common Mistakes:
  • Keeping shuffle partitions too low after salting
  • Not salting and only increasing partitions
  • Using fixed salt value causing no skew fix
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard