1

我有这些文件的集合-

objectA-record-data.log文件 - 包含多行带有时间戳的数据。

objectA-record-metadata.log文件 - 仅包含一行。将其视为对象 A 的所有记录的元数据。

它们将一起形成一个记录以供处理。

我已经能够处理数据文件。映射器将 objectA 设置为数据文件中所有行的键,reducer 处理并打印文本文件。现在我想将元数据也添加到这些记录中。有什么想法我该怎么做?

4

2 回答 2

1

使用分布式缓存:

在驱动程序/配置类中:

DistributedCache.addCacheFile(new URI("/user/chris/theMetaDataFile.txt"), conf);

在映射器中:

public void setup(Context context) {
    Configuration conf = context.getConfiguration();
    Path[] cachedFiles = DistributedCache.getLocalCacheFiles(conf);
    File metadataFile = new File(chachedFiles[0].toString());

    // metadataFile can now be read and the results stored locally for use in the map method
}
于 2012-12-18T23:05:38.923 回答
0

我想您的数据文件和元文件之间必须有一些映射您可以在 Mapper 的设置方法中获取元文件,如下所示

protected void setup(
        org.apache.hadoop.mapreduce.Mapper<Long, Text, Text, Text>.Context context)
        throws java.io.IOException, InterruptedException {
    FileSplit split=(FileSplit)context.getInputSplit();
    Path path=split.getPath();
    Path metaFile=getMetaFile(path);
};
于 2012-12-19T04:42:28.210 回答