【问题标题】:merging two files in hadoop在hadoop中合并两个文件
【发布时间】:2012-09-17 04:38:25
【问题描述】:

我是 hadoop 框架的新手。因此,如果有人可以指导我完成这件事,那将对我有所帮助。 我有两种类型的文件。 dirA/ --> file_a , file_b, file_c

dirB/ --> another_file_a, another_file_b...

目录 A 中的文件包含传输信息。

比如:

   id, time_stamp
   1 , some_time_stamp
   2 , some_another_time_stamp
   1  , another_time_stamp

因此,此类信息分散在 dirA 中的所有文件中。 现在要做的第一件事是:我给出一个时间范围(比如说上周),我想找到该时间范围之间存在的所有唯一 ID。

所以,保存一个文件。

现在,dirB 文件包含地址信息。 比如:

    id, address, zip code
     1, fooadd, 12345
     and so on

所以第一个文件输出的所有唯一ID..我将它们作为输入,然后找到地址和邮政编码。

基本上最后的out就像sql合并。

找到一个时间范围内的所有唯一ID,然后合并地址信息。

我将非常感谢任何帮助。 谢谢

【问题讨论】:

    标签: hadoop apache-pig hadoop-streaming


    【解决方案1】:

    你把它标记为猪,所以我猜你想用它来完成这个?如果是这样,我认为这是一个很好的选择——这在猪身上真的很容易!

    times = LOAD 'dirA' USING PigStorage(', ') AS (id:int, time:long);
    addresses = LOAD 'dirB' USING PigStorage(', ') AS (id:int, address:chararray, zipcode:chararray);
    filtered_times = FILTER times BY (time >= $START_TIME) AND (time <= $END_TIME);
    just_ids = FOREACH filtered_times GENERATE id;
    distinct_ids = DISTINCT just_ids;
    result = JOIN distinct_ids BY id, addresses BY id;
    

    其中$START_TIME$END_TIME 是您可以传递给脚本的参数。

    【讨论】:

    • store result into 'hdfs://host/path/filename';
    • 嗨.. 如果日期是开始日期是 2012-01-27,结束日期是 2012-03-22,那么查询应该是什么样的。文件中,日期格式为2012-02-12格式??
    • 对于解析日期,您应该编写一个 UDF,或者寻找一个预先存在的 UDF。这里有更多信息:UDF Manual。将其转换为 long 以便 pig 可以进行比较。
    猜你喜欢
    • 1970-01-01
    • 2016-12-30
    • 1970-01-01
    • 2011-04-02
    • 2018-03-12
    • 2019-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多