sql 语句:
select order.id, product.pname, order.amount from user join order on product.pid = order.pid
用mr 也可以实现上述这种join ,这里包括mapJoin 和 reduceJoin
reduceJoin的工作原理
mapTask:
对数据进行打标签区分数据不同源
连接on 字段为key, 剩余部分+标签字段 为value
reduceTask:
相同连接字段的数据进入共一个reduce方法
将来源不同的数据汇总
reduceJoin 案例实操
现在有俩个数据文件
order文件 数据如下:
id pid amount
1001 01 1
1002 02 2
1003 03 3
1004 01 4
1005 02 5
1006 03 6
product文件 数据如下:
pid pname
01 小米
02 华为
03 格力
要求结果
id pname amount
1001 小米 1
1004 小米 4
1002 华为 2
1005 华为 5
1003 格力 3
1006 格力 6
mapTask:
public class TableMapper extends Mapper<LongWritable, Text, Text, TableBean> {
String fileName;
String p_id;
Text k = new Text();
@Override
protected void setup(Context context) throws IOException, InterruptedException {
FileSplit inputSplit = (FileSplit) context.getInputSplit();
fileName = inputSplit.getPath().getName();
}
@Override
protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
String line = value.to