Difference between revisions of "Windbag MapReduce Application"

From CSE231 Wiki
Jump to navigation Jump to search
Line 10: Line 10:
 
==WindbagMapper==
 
==WindbagMapper==
 
{{CodeToImplement|WindbagMapper|map|mapreduce.apps.windbag.studio}}
 
{{CodeToImplement|WindbagMapper|map|mapreduce.apps.windbag.studio}}
 +
 +
Note: the WindBagMapper is constructed with an [https://docs.oracle.com/javase/8/docs/api/java/util/function/IntPredicate.html IntPredicate].  This IntPredicate's test method should be invoked to determine if a PlayLine's word count qualifies it as a windbag line.
 +
 
{{Sequential|public void map(PlayLine item, BiConsumer<PlayRole, Boolean> keyValuePairConsumer)}}
 
{{Sequential|public void map(PlayLine item, BiConsumer<PlayRole, Boolean> keyValuePairConsumer)}}
  

Revision as of 22:57, 28 October 2021

Motivation

A simple Mapper and two simple Collectors reinforce our understanding of how pieces of the MapReduce puzzle can be reused. Further, we will reduce the value type of Boolean to both an Integer and a Double in two different Collectors.

Background

A windbag is an exhaustively talkative person. In this studio we will try to find who is the biggest windbag in Hamlet.

Polonius' Advice To Laertes

Code To Implement

WindbagMapper

class: WindbagMapper.java Java.png
methods: map
package: mapreduce.apps.windbag.studio
source folder: student/src/main/java

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.

method: public void map(PlayLine item, BiConsumer<PlayRole, Boolean> keyValuePairConsumer) Sequential.svg (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 Java.png
methods: finisher
package: mapreduce.apps.windbag.studio
source folder: student/src/main/java

method: public Function<List<Boolean>, Integer> finisher() Sequential.svg (sequential implementation only)

Attention niels epting.svg 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 Java.png
methods: finisher
package: mapreduce.apps.windbag.studio
source folder: student/src/main/java

method: public Function<List<Boolean>, Double> finisher() Sequential.svg (sequential implementation only)

Attention niels epting.svg Warning:This class inherits from ClassicReducer. Be sure to have completed that studio first.

Testing Your Solution

Correctness

class: WindbagStudioTestSuite.java Junit.png
package: mapreduce
source folder: testing/src/test/java

Output

class: WindbagApp.java Noun Project stopwatch icon 386232 cc.svg
package: mapreduce.apps.windbag.studio
source folder: src/main/java


           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