gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 14:47:37 25 4
gpt4 key购买 nike

我完全是 hadoop n00b。作为我的第一个 hadoop 项目,我正在尝试解决以下问题。我在亚马逊 S3 存储桶中有一百万多个子文件夹。这些文件夹中的每一个都有两个文件。文件1有如下数据:

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

File2 包含以下格式的客户信息:

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

在存储桶中的所有文件夹中重复相同的模式。

在将所有这些数据写入 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 中实现这样的目标吗?将不胜感激朝着正确的方向前进。

最佳答案

很快想到的是级联的实现。

找出一种方法,以编程方式将您的行转换为 File2 的列,以便您可以遍历所有文件夹并转置文件,以便您的第一列是您的第一行。

对于一个子文件夹:也许为文件 1 设置两个方案,一个 TextDelimited 方案,为文件 2 设置一个 TextLine 方案。将它们设置为 Taps 然后包装每个到 MultiSourceTap 中,这会将所有这些文件连接到一个 Pipe 中。

此时您应该有两个单独的 MultiSourceTaps,一个用于所有 File1,一个用于所有 File2。请记住这里的一些细节,最好只为一个子文件夹设置它,然后遍历其他数百万个子文件夹并输出到其他区域,然后使用 hadoop fs -getmerge将所有输出的小文件合并为一个大文件。

与 Cascading 主题保持一致,然后您可以构建 Pipe 以在内部使用 new Insert(subfolder_name)Each 添加子文件夹名称功能,以便您的两个数据集都引用它来自的子文件夹,然后将它们连接在一起......使用级联 CoGroup 或 Hive-QL Join 加入它们。

可能有比这更容易实现的,但这是快速想到的。 :)

TextDelimited , TextLine , MultiSourceTap

关于使用hadoop连接同一目录中的两个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15265978/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com