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.
Broadcast joins for small tables in 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).
orders (big) with customers (small) using broadcast join on customer_id.from pyspark.sql.functions import broadcast result = orders.join(broadcast(customers), on='customer_id')
sales with regions on region_id using broadcast join.from pyspark.sql.functions import broadcast result = sales.join(broadcast(regions), on=['region_id'])
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.
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()
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.
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
What is the main benefit of using broadcast() in Spark when joining tables?
Solution
Step 1: Understand broadcast join purpose
Broadcast join sends the small table to all worker nodes to avoid shuffling the large table.Step 2: Identify the benefit
This reduces network data movement and speeds up the join operation.Final Answer:
It sends the small table to all worker nodes to speed up the join. -> Option CQuick Check:
Broadcast join = send small table to all nodes [OK]
- Thinking broadcast compresses large table
- Assuming broadcast sorts tables
- Believing broadcast duplicates large table
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')Solution
Step 1: Recall broadcast syntax
In Spark, you usebroadcast()function around the small DataFrame to mark it for broadcasting.Step 2: Apply to join
The join should belarge_df.join(broadcast(small_df), 'id')to broadcast the small table.Final Answer:
broadcast(small_df) -> Option DQuick Check:
Use broadcast() function on small_df [OK]
- Calling broadcast as a method on DataFrame
- Broadcasting the large DataFrame instead
- Incorrect join syntax with broadcast
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())
Solution
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.Step 2: Count matching rows
Ids 1 and 2 match in both tables, so joined_df has 2 rows.Final Answer:
2 -> Option AQuick Check:
Join count = matching ids = 2 [OK]
- Counting all rows from large_df ignoring join
- Assuming broadcast changes join result count
- Counting unmatched rows
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')Solution
Step 1: Check broadcast usage
Broadcast is a function, not a method on DataFrame, sosmall_df.broadcast()is invalid syntax.Step 2: Correct usage
Usebroadcast(small_df)instead to mark small_df for broadcasting.Final Answer:
Using broadcast as a method on DataFrame is incorrect. -> Option BQuick Check:
broadcast() is a function, not a DataFrame method [OK]
- Calling broadcast as a DataFrame method
- Ignoring import of broadcast function
- Confusing which DataFrame to broadcast
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?
Solution
Step 1: Identify table sizes
Sincecountriesis small, broadcasting it avoids shuffling the largeordersDataFrame.Step 2: Choose best join method
Broadcast join sends the small table to all nodes, speeding up the join and reducing network traffic.Final Answer:
Use orders.join(broadcast(countries), 'country_code') to broadcast the small table. -> Option AQuick Check:
Broadcast small table for best join performance [OK]
- Broadcasting the large DataFrame wastes memory
- Not broadcasting causes expensive shuffle
- Collecting large data to driver causes failure
Ready to prove it?
Pass the test and this pattern moves unknown
