Difference between revisions of "Windbag MapReduce Application"
Line 52: | Line 52: | ||
{{Warning|This class inherits from ClassicReducer. Be sure to have completed that studio first.}} | {{Warning|This class inherits from ClassicReducer. Be sure to have completed that studio first.}} | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
+ | =Client= | ||
+ | {{Client|WindbagApp|mapreduce.apps.windbag.client}} | ||
− | <pre> | + | {{CollapsibleConsole|HAMLET|<pre> |
COUNT | COUNT | ||
=========================== | =========================== | ||
Line 96: | Line 91: | ||
ROSENCRANTZ: 0.022222 | ROSENCRANTZ: 0.022222 | ||
LAERTES: 0.016129 | LAERTES: 0.016129 | ||
− | QUEEN: 0.014493 | + | QUEEN: 0.014493</pre>}} |
− | </pre> | + | |
+ | {{CollapsibleConsole|THE_IMPORTANCE_OF_BEING_EARNEST|<pre> 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</pre>}} | ||
+ | |||
+ | |||
+ | =Testing Your Solution= | ||
+ | {{TestSuite|_WindbagTestSuite|mapreduce.apps.windbag.exercise}} | ||
+ | |||
+ | =Pledge, Acknowledgments, Citations= | ||
+ | {{Pledge|mapreduce-windbag-app}} |
Revision as of 19:24, 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