【问题标题】:How to filter Record values of files in hadoop mapreduce?如何过滤hadoop mapreduce中文件的记录值?
【发布时间】:2013-04-25 14:08:34
【问题描述】:

我正在使用 MapReduce 中的一个程序。我有两个文件,我想从 file1 中删除 file2 中存在的一些信息。每行都有一个 ID 作为其键,一些数字(用逗号分隔)作为其值。

file1:
1    1,2,10
2    2,7,8,5
3    3,9,12

file2:
1    1
2    2,5
3    3,9

我想要这样的输出:

output:    
1    2,10
2    7,8
3    12 

我想删除 file1 中在 file2 中具有相同键的值。一种方法是将这两个文件作为输入文件并在映射步骤中生成:(ID, line)。然后在减少步骤中过滤值。但是,我的文件非常非常大,因此我不能这样做。

或者,如果 file1 是输入文件并且在地图中我打开 file2 并查找该行然后比较值,它会有效吗?但是由于我有一百万个键,并且对于每个键我都必须打开 file1,我认为它会有过多的 I/O。

我能做什么?

【问题讨论】:

    标签: hadoop mapreduce


    【解决方案1】:

    您可以同时输入映射器的 file1 和 file2。在映射器中,您将源(file1 或 file2)添加到记录中。然后使用辅助排序来确保 file2 中的记录始终排在第一位。因此,reducer 的组合输入如下所示:

    1    file2,1
    1    file1,1,2,10
    2    file2,2,5
    2    file1,2,7,8,5
    3    file2,3,9
    3    file1,3,9,12
    

    你可以从这里得到减速器的设计。

    【讨论】:

    • 谢谢,但是这样我有很多键值对并且地图输出变得非常大。
    • 这被称为 BigData 的原因 ;-) 我实际上认为这些值将是逗号分隔的列表。因此,每个键最多可以获得 2 个值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-17
    • 2021-04-10
    相关资源
    最近更新 更多