使用hadoop连接同一目录中的两个文件

oxosxuxt  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(377)

我是个十足的hadoop n00b。作为我的第一个hadoop项目,我正在尝试解决以下问题。我有一百万个以上的子文件夹放在一个amazons3存储桶里。每个文件夹都有两个文件。文件1的数据如下:

date,purchaseItem,purchaseAmount
01/01/2012,Car,12000
01/02/2012,Coffee,4
....................

文件2包含以下格式的客户信息:

ClientId:Id1
ClientName:"SomeName"
ClientAge:"SomeAge"

相同的模式在bucket中的所有文件夹中重复。
在将所有这些数据写入hdfs之前,我想按如下方式连接file1和file2:
加入的文件:

ClientId,ClientName,ClientAge,date,purchaseItem,purchaseAmount
Id1,"SomeName","SomeAge",01/01/2012,Car,12000
Id1,"SomeName","SomeAge",01/02/2012,Coffee,4

我需要对每个文件夹都这样做,然后将这个连接的数据集馈送到hdfs中。有人能指出我怎样才能在hadoop中实现这样的功能吗。朝着正确的方向努力将不胜感激。

h43kikqp

h43kikqp1#

很快想到的是级联实现。
找出一种方法,以编程方式将file2的行转换为列,这样就可以遍历所有文件夹并转换文件,使第一列成为第一行。
仅针对一个子文件夹:可能一次设置两个方案 TextDelimited 文件1和a的方案 TextLine 文件2的方案。将这些设置为 Taps 然后把每一个都包起来 MultiSourceTap 这会将所有这些文件连接到一个文件中 Pipe .
在这一点上,你应该有两个独立的 MultiSourceTaps 一个用于所有文件1,一个用于所有文件2。请记住这中间的一些细节,最好只为一个子文件夹设置,然后遍历其他一百万个子文件夹并输出到其他区域,然后使用 hadoop fs -getmerge 把所有输出的小文件放到一个大文件中。
与级联主题保持一致,然后您可以构造 Pipe s添加子文件夹名称,使用 new Insert(subfolder_name) 内部和 Each 函数,以便两个数据集都有一个指向它所来自的子文件夹的引用,以便将它们连接在一起,然后。。。使用级联连接它们 CoGroup 或Hiveql加入。
可能有比这更容易实现的方法,但这正是快速思考时想到的
text分隔,text行,多源Map

vaqhlq81

vaqhlq812#

看看combinefileinputformat。

相关问题