假设有如下两个文件,一个是表是公司和地址的序号的对应,一个表是地址的序号和地址的名称的对应。
表1:
[plain]
A:Beijing Red Star 1
A:Shenzhen Thunder 3
A:Guangzhou Honda 2
A:Beijing Rising 1
A:Guangzhou Development Bank 2
A:Tencent 3
A:Back of Beijing 1
表2:
[plain]
B:1 Beijing
B:2 Guangzhou
B:3 Shenzhen
B:4 Xian
mapreduce如下:
[plain]
private static final Text typeA = new Text("A:");
private static final Text typeB = new Text("B:");
private static Log log = LogFactory.getLog(MTJoin.class);
public static class Map extends Mapper<Object, Text, Text, MapWritable> {
public void map(Object key, Text value, Context context)
throws IOException, InterruptedException {
String valueStr = value.toString();
String type = valueStr.substring(0, 2);
String content = valueStr.substring(2);
log.info(content);
if(type.equals("A:"))
{
String[] contentArray = content.split("\t");
String city = contentArray[0];
String address = contentArray[1];
MapWritable map = new MapWritable();
map.put(typeA, new Text(city));
context.write(new Text(address), map);
}
else if(type.equals("B:"))
{
String[] contentArray = content.split("\t");
String adrNum = contentArray[0];
String adrName = contentArray[1];
MapWritable map = new MapWritable();
map.put(typeB, new Text(adrName));
context.write(new Text(adrNum), map);
}
}
}
public static class Reduce extends Reducer<Text, MapWritable, Text, Text> {
public void reduce(Text key, Iterable<MapWritable> values, Context context)
throws IOException, InterruptedException {
Iterator<MapWritable> it = values.iterator();
List<Text> cityList = new ArrayList<Text>();
List<Text> adrList = new ArrayList<Text>();
while(it.hasNext())
{
MapWritable map = it.next();
if(map.containsKey(typeA))
{
cityList.add((Text)map.get(typeA));
}
else if(map.containsKey(typeB))
{
adrList.add((Text)map.get(typeB));
}
}
for(int i = 0; i < cityList.size(); i++)
{
for(int j = 0; j < adrList.size(); j++)
{
context.write(cityList.get(i), adrList.get(j));
}
}
}
}
原理很简单,map的出口,以地址的序号作为key,然后出来的时候,公司名称放一个list,地址的名称放一个list,两个list的内容作笛卡儿积,就得到了结果。
输出如下:
[plain]
Beijing Red Star Beijing
Beijing Rising Beijing
Back of Beijing Beijing
Guangzhou Honda Guangzhou
Guangzhou Development Bank Guangzhou
Shenzhen Thunder Shenzhen
Tencent Shenzhen
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com