The Reduce phase collects and combines data from the Map phase to produce final results. It helps summarize or aggregate data for easier understanding.
Reduce phase explained in Hadoop
reduce(key, list_of_values) {
// process values
// emit(key, combined_value)
}The reduce function takes a key and all values for that key from the Map phase.
It combines these values to produce a smaller set of results.
reduce('apple', [2, 3, 5]) { sum = 0 for value in list_of_values: sum += value emit('apple', sum) }
reduce('error', [1, 1, 1, 1]) { total_errors = sum(list_of_values) emit('error', total_errors) }
This code simulates the Reduce phase by summing values for each key and printing the result.
def reduce(key, values): total = sum(values) print(f"{key}: {total}") # Example data from Map phase mapped_data = { 'apple': [2, 3, 5], 'banana': [1, 1], 'orange': [4] } for key, values in mapped_data.items(): reduce(key, values)
The Reduce phase only sees data grouped by key from the Map phase.
It is important to write reduce logic that correctly combines all values.
The Reduce phase combines data from Map outputs by key.
It helps summarize or aggregate large data sets.
Reduce functions take a key and list of values, then emit a combined result.
Practice
What is the main purpose of the Reduce phase in Hadoop MapReduce?
Solution
Step 1: Understand the role of Reduce phase
The Reduce phase takes the output from the Map phase and groups data by keys.Step 2: Identify the main function of Reduce
It combines or aggregates the values for each key to produce summarized results.Final Answer:
To combine and summarize data from the Map outputs by key -> Option AQuick Check:
Reduce phase = combine by key [OK]
- Confusing Reduce with Map phase
- Thinking Reduce splits data
- Assuming Reduce reads input files
Which of the following is the correct signature of a Reduce function in Hadoop MapReduce?
public void reduce(KEY key, Iterable<VALUE> values, Context context) throws IOException, InterruptedExceptionSolution
Step 1: Recall Reduce function signature
The Reduce function receives a key and an iterable list of values for that key.Step 2: Match the correct method signature
public void reduce(KEY key, Iterable<VALUE> values, Context context) throws IOException, InterruptedException correctly shows the reduce method with key, Iterable values, and context parameters.Final Answer:
public void reduce(KEY key, Iterable<VALUE> values, Context context) throws IOException, InterruptedException -> Option CQuick Check:
Reduce signature = key + Iterable values + context [OK]
- Confusing map and reduce method signatures
- Using single VALUE instead of Iterable<VALUE> in reduce
- Mixing map parameters with reduce function
Given the following Reduce function snippet, what will be the output for key = "apple" and values = [2, 3, 5]?
public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
int sum = 0;
for (IntWritable val : values) {
sum += val.get();
}
context.write(key, new IntWritable(sum));
}Solution
Step 1: Sum the values list
Values are 2, 3, and 5. Summing gives 2 + 3 + 5 = 10.Step 2: Output key with summed value
The context writes the key "apple" with the sum 10 as IntWritable.Final Answer:
(apple, 10) -> Option BQuick Check:
Sum of values = 10 [OK]
- Returning only first value instead of sum
- Returning count instead of sum
- Ignoring values and outputting zero
Identify the error in this Reduce function code snippet:
public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
int sum = 0;
for (IntWritable val : values) {
sum = val.get();
}
context.write(key, new IntWritable(sum));
}Solution
Step 1: Analyze the for loop logic
The code assigns sum = val.get() inside the loop, overwriting sum each time.Step 2: Identify correct accumulation
Sum should accumulate values using sum += val.get() to add all values.Final Answer:
The sum variable is overwritten instead of accumulated -> Option DQuick Check:
Use += to accumulate sum, not = [OK]
- Using = instead of += in accumulation
- Confusing key type with error
- Thinking context.write is missing
You want to count the total occurrences of each word in a large text dataset using Hadoop MapReduce. Which of the following best describes what the Reduce phase should do?
Solution
Step 1: Understand MapReduce word count flow
Map phase outputs (word, 1) pairs for each word occurrence.Step 2: Role of Reduce phase in counting
Reduce receives each word as key and list of counts (1s), sums them to get total count.Final Answer:
Receive each word as key and list of counts as values, then sum counts to get total occurrences -> Option AQuick Check:
Reduce sums counts per word [OK]
- Confusing Map and Reduce roles
- Thinking Reduce sorts data
- Assuming Reduce outputs raw data
Ready to prove it?
Pass the test and this pattern moves unknown
