- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我收到以下 MRUnit 错误:
ERROR mrunit.TestDriver: Received unexpected output (60, mrdp.MyCustomClass@73207f36)
ERROR mrunit.TestDriver: Missing expected output (60, mrdp.MyCustomClass@6f73cf45) at position 0
我创建了一个MyCustomClass
,它实现了Writable
,并且有4 个int 属性。这是我的映射器的输出值。
下面是mapper的MRUnit测试代码:
@Test
public void testMapper() throws IOException {
MyCustomClass result = new MyCustomClass();
result.setAttr1(1);
result.setAttr2(0);
result.setAttr3(0);
result.setAttr4(0);
mapDriver.withInput(new LongWritable(1), new Text("60,5596,1,256"));
mapDriver.addOutput(new Text("60"), result);
mapDriver.runTest();
}
当在上面的 new Text("60,5596,1,256")
中定位“1”时,我的 Mapper 应该调用它的 setter setAttr1(1)
。
如何使用自定义类(具有多个属性)测试此结果?作业执行成功,只是不知道如何让MRUnit测试工作。
$ hadoop fs -cat patterns/minmaxcount/outuserprefs/part*
23 mrdp.MyCustomClass@4cf15f6c
60 mrdp.MyCustomClass@4cf15f6c
最佳答案
如果你想测试相等性,你需要为你的自定义类覆盖 equals()
和 hascode()
。如果你不这样做,就没有办法测试“语义平等”。将使用默认的 Object
方法。这就是你所面临的。如需进一步讨论,请参阅 Why do I need to override the equals and hashCode methods in Java?
下面是一个使用自定义类 CustomClass
的简单 JUnit 测试。我注释掉了 equals
和 hashcode
。如果您运行测试,它将失败,并显示与您收到的消息类似的消息。去掉注释再运行就可以通过了。
import static org.junit.Assert.*;
import org.junit.Test;
public class CustomClass {
String firstName;
String lastName;
public void setFirstName(String firstName) { this.firstName = firstName; }
public void setLastName(String lastName) { this.lastName = lastName; }
@Test
public void testEqaulity() {
CustomClass clazz1 = new CustomClass();
clazz1.setFirstName("Stack");
clazz1.setLastName("Overflow");
CustomClass clazz2 = new CustomClass();
clazz2.setFirstName("Stack");
clazz2.setLastName("Overflow");
assertEquals(clazz1, clazz2);
}
/*
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((firstName == null) ? 0 : firstName.hashCode());
result = prime * result
+ ((lastName == null) ? 0 : lastName.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
CustomClass other = (CustomClass) obj;
if (firstName == null) {
if (other.firstName != null)
return false;
} else if (!firstName.equals(other.firstName))
return false;
if (lastName == null) {
if (other.lastName != null)
return false;
} else if (!lastName.equals(other.lastName))
return false;
return true;
}
*/
}
如果您没有实现这些方法的经验或知识,大多数 IDE 都可以选择为您创建它们。
在这两种情况下,您都需要选择要包含(检查)在 equals 和 hashcode 中的属性。这些是我使用的仅有的两个 IDE :-)
关于java - 在 MRUnit 中收到意外输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25723526/
我写了一个 MRUnit 来测试我的映射器。但是,我不知道如何在 Eclipse 中运行它,因为它会从分布式缓存中读取一些数据。当我在 Eclipse 中将它作为普通类运行时,它给了我一堆错误。这些是
我只有一个映射器类,它创建用于批量加载到 HBase 的文件,并且我编写了一个 MRUnit 用于单元测试。 虽然预期结果和重试结果相同,但 MRUnit 失败并显示消息“缺少预期输出”。 预期输出:
我正在尝试为我的 hadoop MR 作业编写一些单元测试并遇到以下异常。这是我第一次使用 MRUnit,所以我不太确定这里发生了什么。 java.lang.IncompatibleClassChan
我正在 O'Really 的“Hadoop,权威指南第 4 版”一书中学习 Hadoop,我在尝试创建用于 MRUnit 测试的 Maven 项目时遇到了问题。我刚刚创建了书中所示的 pom.xml
当我运行带有 MultipleOutputs 的基本 MRUnit 时,出现以下异常: java.lang.NullPointerException at org.apache.hadoop.fs.P
我是 Hadoop 的新手。昨天照着书上的,使用了JUnit作为气象数据的apper单元测试。但是也有一些问题。 这是我的 pom 文件: junit junit
我一直在 mrunit 文档中搜索,但到目前为止还没有找到。我如何在我的 mrunit 中传递配置参数。 例如,如果我以 wordcount 为例。 比方说,在我的驱动程序代码中我正在设置这个参数..
我收到以下 MRUnit 错误: ERROR mrunit.TestDriver: Received unexpected output (60, mrdp.MyCustomClass@73207f3
有没有一种方法可以通过使用 MultipleOutputFormat 写入多个输出文件的 MRUnit 来测试 reduce 类? 最佳答案 看起来对 MultipleOutputs 的支持仍在进行中
我找不到最新的 mrunit(1.1.0)在 Cloudera 存储库中。可用的是0.8.0-incubating .以下是我的 pom : 4.0.0 com.ma.hadoop
在运行测试用例时,出现此异常 java.lang.IncompatibleClassChangeError: Found interface org.apache.hadoop.mapreduce.
我正在使用 MRUnit 测试我的映射器。我将键和值列表作为输入从测试类传递给映射器。问题是: String key=1234_abc; ArrayList list = new ArrayList(
我正在学习权威指南书中的 Hadoop,并尝试执行导致错误的这段代码。 第 5 章的示例。 Github代码链接: 资源: https://github.com/tomwhite/hadoop-boo
我创建了一个 Mapper & Reducer,它使用 AVRO 作为输入,使用 map-output 和 reduce 输出。创建 MRUnit 测试时,我得到以下堆栈跟踪: java.lang.N
我正在使用 MRUnit 测试 Map Reduce 代码。我不能使用 .withInputValue,因为它已被弃用。我找不到有效的等效项。 setInputValue 也不起作用。解决方法是什么?
我一直在研究 MRUnit,并尝试按照 wordcount 的教程为 hadoop wordcount 示例运行它和 unit testing 虽然不是粉丝,但我一直在使用 Eclipse 运行代码,
我正在尝试使用 MRUnit 对 Hadoop2 进行测试,但出现以下错误: java.lang.IncompatibleClassChangeError: Found class org.apach
我正在尝试使用 MRUnit 测试 Hadoop .mapreduce Avro 作业。我收到如下所示的 NullPointerException。我附上了一部分 pom 和源代码。任何援助将不胜感激
相关问题@Testing multiple outputs with MRUnit但答案不适用于较新的版本 1.1.0 问题是如何设置多个命名输出,以便底层模拟实现识别命名路径。我写信是为了将相同的
我正在尝试测试下面的 Reducer Reducer, AvroKey, NullWritable> 出于这些目的,我在测试中使用了下一个代码: CustomReducer reducer = new
我是一名优秀的程序员,十分优秀!