Bird
Raised Fist0
Apache Sparkdata~5 mins

Broadcast joins for small tables in Apache Spark

Choose your learning style10 modes available
Introduction

Broadcast joins help join a big table with a small table quickly by sending the small table to all worker machines. This avoids slow data shuffling.

When you have one big dataset and one small dataset to join.
When the small table fits in memory and you want faster joins.
When you want to reduce network traffic during join operations.
When you want to improve performance of Spark SQL joins on small tables.
When you want to avoid expensive shuffle operations in distributed joins.
Syntax
Apache Spark
from pyspark.sql.functions import broadcast

joined_df = big_df.join(broadcast(small_df), on='key')

Use broadcast() around the small DataFrame to tell Spark to send it to all nodes.

The on parameter specifies the join key column(s).

Examples
Join orders (big) with customers (small) using broadcast join on customer_id.
Apache Spark
from pyspark.sql.functions import broadcast

result = orders.join(broadcast(customers), on='customer_id')
Join sales with regions on region_id using broadcast join.
Apache Spark
from pyspark.sql.functions import broadcast

result = sales.join(broadcast(regions), on=['region_id'])
Sample Program

This example creates a big table of fruits and a small table of colors. It joins them on id using a broadcast join for faster performance.

Apache Spark
from pyspark.sql import SparkSession
from pyspark.sql.functions import broadcast

spark = SparkSession.builder.appName('BroadcastJoinExample').getOrCreate()

# Create big DataFrame
big_data = [(1, 'apple'), (2, 'banana'), (3, 'cherry'), (4, 'date')]
big_df = spark.createDataFrame(big_data, ['id', 'fruit'])

# Create small DataFrame
small_data = [(1, 'red'), (2, 'yellow'), (3, 'red')]
small_df = spark.createDataFrame(small_data, ['id', 'color'])

# Perform broadcast join
joined_df = big_df.join(broadcast(small_df), on='id', how='inner')

# Show result
joined_df.show()
OutputSuccess
Important Notes

Broadcast joins work best when the small table fits comfortably in memory.

If the small table is too large, broadcasting can cause memory errors.

You can check Spark UI to see if broadcast join was used.

Summary

Broadcast joins send the small table to all worker nodes to speed up joins.

Use broadcast() function in Spark to mark a small table for broadcasting.

This reduces data shuffle and improves join performance when one table is small.

Practice

(1/5)
1.

What is the main benefit of using broadcast() in Spark when joining tables?

easy
A. It compresses the large table to save memory.
B. It sorts both tables before joining.
C. It sends the small table to all worker nodes to speed up the join.
D. It duplicates the large table across all nodes.

Solution

  1. Step 1: Understand broadcast join purpose

    Broadcast join sends the small table to all worker nodes to avoid shuffling the large table.
  2. Step 2: Identify the benefit

    This reduces network data movement and speeds up the join operation.
  3. Final Answer:

    It sends the small table to all worker nodes to speed up the join. -> Option C
  4. Quick Check:

    Broadcast join = send small table to all nodes [OK]
Hint: Broadcast small table to all nodes to avoid shuffle [OK]
Common Mistakes:
  • Thinking broadcast compresses large table
  • Assuming broadcast sorts tables
  • Believing broadcast duplicates large table
2.

Which of the following is the correct syntax to broadcast a small DataFrame small_df in Spark before joining?

from pyspark.sql.functions import broadcast

result = large_df.join(____, 'id')
easy
A. small_df.join(broadcast())
B. small_df.broadcast()
C. broadcast(large_df)
D. broadcast(small_df)

Solution

  1. Step 1: Recall broadcast syntax

    In Spark, you use broadcast() function around the small DataFrame to mark it for broadcasting.
  2. Step 2: Apply to join

    The join should be large_df.join(broadcast(small_df), 'id') to broadcast the small table.
  3. Final Answer:

    broadcast(small_df) -> Option D
  4. Quick Check:

    Use broadcast() function on small_df [OK]
Hint: Use broadcast() around small DataFrame in join [OK]
Common Mistakes:
  • Calling broadcast as a method on DataFrame
  • Broadcasting the large DataFrame instead
  • Incorrect join syntax with broadcast
3.

Given the following Spark code, what will be the output count?

from pyspark.sql import SparkSession
from pyspark.sql.functions import broadcast

spark = SparkSession.builder.getOrCreate()

large_data = [(1, 'A'), (2, 'B'), (3, 'C')]
small_data = [(1, 'X'), (2, 'Y')]

large_df = spark.createDataFrame(large_data, ['id', 'val1'])
small_df = spark.createDataFrame(small_data, ['id', 'val2'])

joined_df = large_df.join(broadcast(small_df), 'id')
print(joined_df.count())
medium
A. 2
B. 5
C. 3
D. 0

Solution

  1. Step 1: Analyze join keys and data

    large_df has ids 1, 2, 3; small_df has ids 1, 2. Join on 'id' keeps only matching ids.
  2. Step 2: Count matching rows

    Ids 1 and 2 match in both tables, so joined_df has 2 rows.
  3. Final Answer:

    2 -> Option A
  4. Quick Check:

    Join count = matching ids = 2 [OK]
Hint: Count matching keys in both tables after join [OK]
Common Mistakes:
  • Counting all rows from large_df ignoring join
  • Assuming broadcast changes join result count
  • Counting unmatched rows
4.

Identify the error in the following Spark code that attempts a broadcast join:

from pyspark.sql.functions import broadcast

result = large_df.join(small_df.broadcast(), 'id')
medium
A. Missing import for broadcast function.
B. Using broadcast as a method on DataFrame is incorrect.
C. Join key 'id' does not exist in both DataFrames.
D. Broadcasting large_df instead of small_df.

Solution

  1. Step 1: Check broadcast usage

    Broadcast is a function, not a method on DataFrame, so small_df.broadcast() is invalid syntax.
  2. Step 2: Correct usage

    Use broadcast(small_df) instead to mark small_df for broadcasting.
  3. Final Answer:

    Using broadcast as a method on DataFrame is incorrect. -> Option B
  4. Quick Check:

    broadcast() is a function, not a DataFrame method [OK]
Hint: Use broadcast() function, not DataFrame.broadcast() [OK]
Common Mistakes:
  • Calling broadcast as a DataFrame method
  • Ignoring import of broadcast function
  • Confusing which DataFrame to broadcast
5.

You have a large DataFrame orders with millions of rows and a small DataFrame countries with 10 rows. You want to join them on country_code. Which approach will give the best performance?

hard
A. Use orders.join(broadcast(countries), 'country_code') to broadcast the small table.
B. Use orders.join(countries, 'country_code') without broadcasting.
C. Broadcast the large orders DataFrame instead.
D. Collect both DataFrames to driver and join locally.

Solution

  1. Step 1: Identify table sizes

    Since countries is small, broadcasting it avoids shuffling the large orders DataFrame.
  2. Step 2: Choose best join method

    Broadcast join sends the small table to all nodes, speeding up the join and reducing network traffic.
  3. Final Answer:

    Use orders.join(broadcast(countries), 'country_code') to broadcast the small table. -> Option A
  4. Quick Check:

    Broadcast small table for best join performance [OK]
Hint: Broadcast the small table in large-small joins [OK]
Common Mistakes:
  • Broadcasting the large DataFrame wastes memory
  • Not broadcasting causes expensive shuffle
  • Collecting large data to driver causes failure
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