我有这些文件的集合-
objectA-record-data.log文件 - 包含多行带有时间戳的数据。
objectA-record-metadata.log文件 - 仅包含一行。将其视为对象 A 的所有记录的元数据。
它们将一起形成一个记录以供处理。
我已经能够处理数据文件。映射器将 objectA 设置为数据文件中所有行的键,reducer 处理并打印文本文件。现在我想将元数据也添加到这些记录中。有什么想法我该怎么做?
使用分布式缓存:
在驱动程序/配置类中:
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
}
我想您的数据文件和元文件之间必须有一些映射您可以在 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);
};