hadoop mapreduce多表关联
hadoop mapreduce多表关联 假设有如下两个文件,一个是表是公司和地址的序号的对应,一个表是地址的序号和地址的名称的对应。 表1: [plain] A:Beijing Red Star 1 A:Shenzhen Thunder 3 A:Guangzhou Honda 2 A:Beijing Rising 1 A:Guangzhou Development Ba
hadoop mapreduce多表关联
假设有如下两个文件,一个是表是公司和地址的序号的对应,一个表是地址的序号和地址的名称的对应。
表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
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
public void reduce(Text key, Iterable
throws IOException, InterruptedException {
Iterator
List
List
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
{
for(int j = 0; 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
上一篇: Python File readlines() 使用方法
下一篇: PHP系统邮件发送函数
推荐阅读
-
MongoDB中多表关联查询($lookup)的深入讲解
-
mybatisplus代码生成器使用(mybatisplus多表关联查询)
-
Yii2.0框架模型多表关联查询示例
-
序列化表单为json对象,datagrid带额外参提交一次查询 后台用Spring data JPA 实现带条件的分页查询 多表关联查询
-
大数据-Hadoop生态(15)-MapReduce框架原理-自定义FileInputFormat
-
mybatisplus代码生成器使用(mybatisplus多表关联查询)
-
Hadoop 中文编码相关问题 -- mapreduce程序处理GBK编码数据并输出GBK编码数据
-
大数据-Hadoop生态(18)-MapReduce框架原理-WritableComparable排序和GroupingComparator分组
-
Hadoop_MapReduce_03
-
hadoop(二MapReduce)