hadoop中对表的join功能的几个问题

join,将两张表通过某个共同的key整合起来。

这篇文章为已经学习过join功能的人准备,请看下边几个问题:

1,为什么在join时候需要获取文件的文件名来区分出数据究竟来源于哪个文件,有没有别的方式来对map获取的数据的所属进行区分。

        hadoop默认使用FileInputFormat来读入磁盘数据,这个类的切片策略是按照设置的split size切片,同时对每个新文件不管上个文件最后一段数据是否打到split size ,都会重新开一个split。

        对于小文件达不到128M基本就是一个文件一个split,所以我们可以简单的通过获得context中获得FileSplit对象,然后再通过他的方法获得split的对应的文件的name。

实际上,MapTesk以split作为单位,处理数据,如果有3个split 一个maptesk, 三个split都会进入这个maptesk中的map方法,又因为上边的论述,不同split来着与不同文件,他们除了文件名这个便于区分彼此的特征,我们也能找到其他的特征,比如,不同文件数据长度等,不使用文件名我们依然可以在map阶段区分出来自不同文件的数据。

2,为什么要将reduce获取的数据先存入一个数据容器,在操作,是否可以通过某种方式,直接在reduce中匹配join的表1和表2并输出数据?

不能,想要在获取一行数据后直接连接两个表,你至少需要得到两个表中的其中一个的完整数据,这样才可以针对另一个表输入的每一行去进行外键查找匹配,但是reduce每次获得的数据都是两个表的各自一部分,所以我们需要自己把得到的数据整理完整。

另一个重要原因是,reduce的键值对的值,是一个迭代数据,我们一般1通过迭代器获得其中内容,而迭代器不允许直接

3,reduce的数据容器设置在reduce()方法内还是方法外?

        我们的数据容器很显然是只需要存着一次reduce方法的数据,所以放入reduce内部就可以了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值