数据集文件:
customers:
1,Stephanie leung,555-555-555
2,Edward Kim,123-456-7890
3,Jose Madriz,281-330-8004
4,David Stork,408-555-0000
orders:
3,A,12.95,02-Jun-2008
1,B,88.25,20-May-2008
2,C,32.00,30-Nov,2007
3,D,25.02,22-Jan-2009
程序预期实现结果:
1 Stephanie leung,555-555-555,B,88.25,20-May-2008
2 Edward Kim,123-456-7890,C,32.00,30-Nov,2007
3 Jose Madriz,281-330-8004,D,25.02,22-Jan-2009
3 Jose Madriz,281-330-8004,A,12.95,02-Jun-2008
接下来,就来实现一下这个小程序:
在上一篇中说了,我们需要实现几个类,一个是TaggedMapOutput的子类,还有两个是DataJoinMapperBase的子类,一个是mapper,一个是reducer,下面是具体的实现:
TaggedWritable类继承自TaggedMapOutput:
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import org.apache.hadoop.contrib.utils.join.TaggedMapOutput;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.io.Writable;
import org.apache.hadoop.util.ReflectionUtils;
/*TaggedMapOutput是一个抽象数据类型,封装了标签与记录内容
此处作为DataJoinMapperBase的输出值类型,需要实现Writable接口,所以要实现两个序列化方法
自定义输入类型*/
public class TaggedWritable extends TaggedMapOutp