MapReduce Design Patterns

Errata for MapReduce Design Patterns

Submit your own errata for this product.

The errata list is a list of errors and their corrections that were found after the product was released. If the error was corrected in a later version or reprint the date of the correction will be displayed in the column titled "Date Corrected".

The following errata were submitted by our customers and approved as valid errors by the author or editor.

Color key: Serious technical mistake Minor technical mistake Language or formatting error Typo Question Note Update

Version Location Description Submitted By Date submitted Date corrected
Page 24
1st paragraph

"but if the count is output from the reducer with the count"
should change the second count to average?

Note from the Author or Editor:
Correct -- this is a typo in the book. It should be changed to average. Thank you for reporting this!

cxl  Jul 16, 2014  Jul 22, 2015
Printed, PDF, ePub, Mobi, , Other Digital Version
Page 28
First paragrpah, line 3

Typo 'aa' in place of the word 'a':

"However the next example describes aa more complex"

should be:

"However the next example describes a more complex"

Elliot West  Feb 07, 2013  Jul 22, 2015
Page 31
source code paragraph, i.e., MedianStdDevCombiner#reduce(...)

In source code (MedianStdDevCombiner#reduce)

at 15th line:
count.set(count.get() ...);

To get correct 'outValue', that code will change like this:
outValue.put(entry.getKey(), count.set(count.get() ...);

Thanks. :)

Note from the Author or Editor:
Thank you for your submission!

The LongWritable 'count' variable pulled out of the map does not actually have to be put back into the map as you have. 'count' is an object pointer and simply changing the value using LongWritable#set will change the value in the map. If it were a map to a plain Java type like 'long', then we would need to set the key/value pair again.

I'll be sure to update the code to make it more clear!

Thank you again!

Justin Lee  May 23, 2013  Jul 22, 2015
Page 43
Figure 2-1

I think the reducer output for one of the reducers should read "(group A, summary) (group C, summary)", since the partitioner should make sure that identical keys would all go to the same reducer, hence partition the key identifying group A to reducer 1, the key for group B to reducer 2, and so on (see also Page 27 (Chapter 1 > Map Reduce and Hadoop Refresher > partitioner) ).

Note from the Author or Editor:
This is correct -- Figure 2-1 on page 16 (printed version) should has the output from both reducers as "(group B, summary) (group D, summary)", where one of them should read "(group A, summary) (group C, summary)". Multiple reducers do not receive the same groups.


Rupert Huelsey  Nov 29, 2012  Jul 22, 2015
Printed, PDF
Page 59
pseudocode, cleanup()

In the cleanup() method, it states "for record in top sorted ten list" - the word 'ten' is in the wrong position. This text should read instead "for record in top ten sorted list"

Note from the Author or Editor:
Correct, this is a typo and will be corrected. Thank you for the submission!

Robert Dyer  Feb 22, 2015  Jul 22, 2015
Page 60
1st paragraph, 3rd line

The original sentence : "These are the lowest K for this particular map task"
But in the context (i.e. top ten pattern), 'lowest ' is errata.
so, 'highest' is correct. I think :)

Note from the Author or Editor:
Correct. 'lowest K' should be changed to 'highest K'.

Justin Lee  May 23, 2013  Jul 22, 2015
Page 71
Fourth bullet

The fourth bullet states "The generating data pattern" is part of this chapter -- which was true once upon a time. It was moved to the Input/Output chapter when this chapter was created. This bullet should be removed.

Adam Shook
Jan 09, 2013  Jul 22, 2015
Page 164, 165
164p: last paragraph, 165p: source code 36 line

At the paragraph that describe the 'Replicated join mapper code'

"The map is used in the calls to map to enrich the output value with the user's reputation."

should be

"The map is used in the calls to map to enrich the output key with the user's reputation."

i.e., change 'output value' to 'output key'

also in 165 page's source code

"outkey.set(value.get() + ... );" should be "outkey.set(key.toString() + ...);"

Is it right? thanks.

Note from the Author or Editor:
Correct! It should be using the key, not the value as the error description states.

Justin Lee  May 23, 2013  Jul 22, 2015
Page 193
2nd paragraph (after the code sample)

"RecordReader code" should actually be "RecordWriter code"

Note from the Author or Editor:
The heading labeled RecordReader code should read RecordWriter code.

Yury  Dec 24, 2013  Jul 22, 2015
Page 207
1st paragraph

"The main thing to focus on is the templated arguments when
extending the InputFormat class" - class name here should be OutputFormat, not InputFormat.

Note from the Author or Editor:
Typo here -- should read OutputFormat not InputFormat.

Yury  Jan 04, 2014  Jul 22, 2015