【问题标题】:Hadoop InputFormat set Key to Input File PathHadoop InputFormat 将密钥设置为输入文件路径
【发布时间】:2015-03-05 19:43:00
【问题描述】:

我的 hadoop 工作需要了解每条记录的派生输入路径。

例如,假设我正在对一组 S3 对象运行作业:

s3://bucket/file1
s3://bucket/file2
s3://bucket/file3

我想减少键值对例如

s3://bucket/file1    record1
s3://bucket/file1    record2
s3://bucket/file2    record1
...

是否有org.apache.hadoop.mapreduce.InputFormat 的扩展可以实现这一点?或者有比使用自定义输入格式更好的方法吗?

我知道在映射器中可以从MapContext (How to get the input file name in the mapper in a Hadoop program?) 访问此信息,但我使用的是 Apache Crunch,我无法控制我的任何步骤是 Maps 还是 Reduces,但是我可以可靠地控制InputFormat,所以在我看来它是做这个的地方。

【问题讨论】:

    标签: java hadoop apache-crunch


    【解决方案1】:

    请查看my blog article to customize inputsplit and recordreader

    该博客中的代码将密钥设置如下(记录阅读器代码的第 69-70 行)

    value = new Text(line);
    key = new LongWritable(splitstart);
    

    在您的情况下,您需要如下设置密钥,但我没有测试它。

    key = fsplit.getPath().toString();
    

    【讨论】:

    • 谢谢,我想我最终按照你的描述写了自己的。如果有人正在阅读他的 ping 我并且生病挖掘并发布。
    猜你喜欢
    • 2018-07-08
    • 2016-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多