Difference between revisions of "Windbag MapReduce Application"
(→Client) |
|||
Line 56: | Line 56: | ||
{{Client|WindbagApp|mapreduce.apps.windbag.client}} | {{Client|WindbagApp|mapreduce.apps.windbag.client}} | ||
− | {{CollapsibleConsole|HAMLET|<pre> | + | {{CollapsibleConsole|HAMLET|<pre style="border: 0px; background: #000; color:#fff;"> |
COUNT | COUNT | ||
=========================== | =========================== | ||
Line 93: | Line 93: | ||
QUEEN: 0.014493</pre>}} | QUEEN: 0.014493</pre>}} | ||
− | {{CollapsibleConsole|THE_IMPORTANCE_OF_BEING_EARNEST|<pre> COUNT | + | {{CollapsibleConsole|THE_IMPORTANCE_OF_BEING_EARNEST|<pre style="border: 0px; background: #000; color:#fff;"> COUNT |
=========================== | =========================== | ||
LADY BRACKNELL: 7 | LADY BRACKNELL: 7 | ||
Line 110: | Line 110: | ||
JACK: 0.013825 | JACK: 0.013825 | ||
ALGERNON: 0.009950</pre>}} | ALGERNON: 0.009950</pre>}} | ||
− | |||
=Testing Your Solution= | =Testing Your Solution= |
Revision as of 19:25, 7 March 2023
Contents
Motivation
A simple Mapper and two simple ClassicReducers reinforce our understanding of how pieces of the MapReduce puzzle can be reused. Further, we will reduce the value type of List<Boolean> to both an Integer and a Double in separate Reducers.
Background
A windbag is an exhaustively talkative person. Act I Scene 3 of Hamlet has a famous example.
In this assignment we will try to determine who is the biggest windbag in a particular play with Hamlet and The Importance of Being Earnest serving as two pieces of data.
Code To Implement
WindbagMapper
class: | WindbagMapper.java | |
methods: | windbagLinePredicate map |
|
package: | mapreduce.apps.windbag.studio | |
source folder: | student/src/main/java |
constructor and instance variable
method: public WindbagMapper(IntPredicate windbagLinePredicate)
(sequential implementation only)
Hang onto the value of the windbagLinePredicate parameter as an instance variable for later use.
windbagLinePredicate
This method exists largely as a reminder to use the windbagLinePredicate passed to the constructor.
map
Note: the WindBagMapper is constructed with an IntPredicate. This IntPredicate's test method should be invoked to determine if a PlayLine's word count qualifies it as a windbag line. You can investigate the PlayLine class to see what information it contains.
method: public List<Map.Entry<PlayRole, Boolean>> map(PlayLine item)
(sequential implementation only)
TrueCountClassicReducer
This Collector reduces to the number of emitted trues.
For example, if a total of eight (8) values were emitted for a particular key and three (3) of them were true:
[false, true, false, false, true, true, false, false]
then the reduced value would be 3
class: | TrueCountClassicReducer.java | |
methods: | reduce | |
package: | mapreduce.apps.windbag.exercise | |
source folder: | student/src/main/java |
method: public Integer reduce(List<Boolean> container)
(sequential implementation only)
Warning:This class inherits from ClassicReducer. Be sure to have completed that studio first. |
TruePortionClassicReducer
This Collector reduces to the portion of emitted trues.
For example, if a total of eight (8) values were emitted for a particular key and three (3) of them were true:
[false, true, false, false, true, true, false, false]
then the reduced value would be 0.375
class: | TruePortionClassicReducer.java | |
methods: | reduce | |
package: | mapreduce.apps.windbag.exercise | |
source folder: | student/src/main/java |
method: public Double reduce(List<Boolean> container)
(sequential implementation only)
Warning:This class inherits from ClassicReducer. Be sure to have completed that studio first. |
Client
class: | WindbagApp.java | CLIENT |
package: | mapreduce.apps.windbag.client | |
source folder: | student/src//java |
HAMLET |
---|
COUNT =========================== HAMLET: 27 KING: 14 POLONIUS: 7 HORATIO: 5 OPHELIA: 2 GHOST: 2 FIRST PLAYER: 2 LAERTES: 1 ROSENCRANTZ: 1 VOLTEMAND: 1 PLAYER KING: 1 GENTLEMAN: 1 PLAYER QUEEN: 1 QUEEN: 1 PORTION =========================== VOLTEMAND: 1.000000 GENTLEMAN: 0.333333 PLAYER KING: 0.250000 FIRST PLAYER: 0.250000 PLAYER QUEEN: 0.200000 GHOST: 0.142857 KING: 0.137255 POLONIUS: 0.081395 HAMLET: 0.075419 HORATIO: 0.046729 OPHELIA: 0.034483 ROSENCRANTZ: 0.022222 LAERTES: 0.016129 QUEEN: 0.014493 |
THE_IMPORTANCE_OF_BEING_EARNEST |
---|
COUNT =========================== LADY BRACKNELL: 7 JACK: 3 ALGERNON: 2 GWENDOLEN: 2 MISS PRISM: 1 CHASUBLE: 1 PORTION =========================== LADY BRACKNELL: 0.083333 MISS PRISM: 0.024390 CHASUBLE: 0.023810 GWENDOLEN: 0.019802 JACK: 0.013825 ALGERNON: 0.009950 |
Testing Your Solution
class: | _WindbagTestSuite.java | |
package: | mapreduce.apps.windbag.exercise | |
source folder: | testing/src/test/java |
Pledge, Acknowledgments, Citations
file: | mapreduce-windbag-app-pledge-acknowledgments-citations.txt |
More info about the Honor Pledge