You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@mrunit.apache.org by "Dan Ziemba (JIRA)" <ji...@apache.org> on 2015/08/21 00:51:47 UTC
[jira] [Created] (MRUNIT-224) Custom Comparators are not used for
results written to MultipleOutputs
Dan Ziemba created MRUNIT-224:
---------------------------------
Summary: Custom Comparators are not used for results written to MultipleOutputs
Key: MRUNIT-224
URL: https://issues.apache.org/jira/browse/MRUNIT-224
Project: MRUnit
Issue Type: Bug
Affects Versions: 1.1.0
Reporter: Dan Ziemba
TestDriver's setValueComparator method has no effect when testing for data written to MultipleOutputs. setKeyComparator probably doesn't work either. See the example unit test below:
{code:java}
package test;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.lib.output.MultipleOutputs;
import org.apache.hadoop.mrunit.mapreduce.MapDriver;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import java.io.IOException;
import java.util.Comparator;
@RunWith(PowerMockRunner.class)
@PrepareForTest(MosComparatorTest.MosMapper.class)
public class MosComparatorTest {
private class NormalMapper extends Mapper<LongWritable, Text, LongWritable, Text> {
@Override
protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
context.write(key, new Text("testValueOut"));
}
}
public class MosMapper extends Mapper<LongWritable, Text, LongWritable, Text> {
private MultipleOutputs<LongWritable, Text> mos;
@Override
protected void setup(Context context) throws IOException, InterruptedException {
mos = new MultipleOutputs<>(context);
}
@Override
protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
mos.write("testOut", key, new Text("testValueOut"));
}
@Override
protected void cleanup(Context context) throws IOException, InterruptedException {
mos.close();
}
}
@Test
public void testNormal() throws Exception {
MapDriver<LongWritable, Text, LongWritable, Text> driver = MapDriver.newMapDriver(new NormalMapper());
driver.withInput(new LongWritable(123), new Text("testValueIn"))
.withOutput(new LongWritable(123), new Text("testValueOut"))
.runTest();
}
@Test
public void testNormalValueComparator() throws Exception {
MapDriver<LongWritable, Text, LongWritable, Text> driver = MapDriver.newMapDriver(new NormalMapper());
driver.setValueComparator(new Comparator<Text>() {
@Override
public int compare(Text o1, Text o2) {
// Everything matches
return 0;
}
});
driver.withInput(new LongWritable(123), new Text("testValueIn"))
.withOutput(new LongWritable(123), new Text("this doesn't matter"))
.runTest();
}
@Test
public void testMos() throws Exception {
MapDriver<LongWritable, Text, LongWritable, Text> driver = MapDriver.newMapDriver(new MosMapper());
driver.withInput(new LongWritable(123), new Text("testValueIn"))
.withMultiOutput("testOut", new LongWritable(123), new Text("testValueOut"))
.runTest();
}
/**
* This test fails. It should pass because of the custom value Comparator.
* <p/>
* <pre>java.lang.AssertionError: 1 Error(s): (Expected output (123, this shouldn't matter) for namedOutput 'testOut' at position 0, but found (123, testValueOut))</pre>
*/
@Test
public void testMosValueComparator() throws Exception {
MapDriver<LongWritable, Text, LongWritable, Text> driver = MapDriver.newMapDriver(new MosMapper());
driver.setValueComparator(new Comparator<Text>() {
@Override
public int compare(Text o1, Text o2) {
// Everything matches
return 0;
}
});
driver.withInput(new LongWritable(123), new Text("testValueIn"))
.withMultiOutput("testOut", new LongWritable(123), new Text("this shouldn't matter"))
.runTest();
}
}
{code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)