我有两个文件说file1.txt和file2.txt,里面有一些记录。两个文件都有相同的架构。我正在使用一个Mapper类。我想知道mapper类中的元组是否来自file1或file2
答案 0 :(得分:0)
如果要识别输入文件数据的来源,则需要覆盖run方法和recordreader类方法。我会建议你改为复杂一点。
您可以制作多个映射器来读取这两个文件,然后在每个映射器中,您可以在输出中添加一些令牌,这可以帮助您根据映射器识别结果。现在在您的驱动程序类中,您需要使用multipleinput类。请访问此链接以获取更多信息 (https://hadoop.apache.org/docs/r2.6.3/api/org/apache/hadoop/mapreduce/lib/input/MultipleInputs.html)。
当你运行你的jar文件时,给出你想要读取输入数据的两个输入文件的路径,以及你想要存储输出的路径。
有关详细信息,请参阅此处http://dailyhadoopsoup.blogspot.in/2014/01/mutiple-input-files-in-mapreduce-easy.html?m=1
我希望这可以解决你的问题。
答案 1 :(得分:0)
你可以试试这个: -
我们在map中编写逻辑以获取文件名信息,以防我们将多个文件发送到单个映射器。
如果我的mapper只获取一个文件,我们可以在setup方法中写这个。这样可以节省I / O操作并仅提取一次。
String filename = new String;
public void map(LongWritable key, Text values,Context context)
{
FileSplit fsFileSplit = (FileSplit) context.getInputSplit();
filename = context.getConfiguration().get(fsFileSplit.getPath().getParent().getName()));
}
在此之后,您还可以编写一个逻辑来根据文件名隔离结果(读取的行)。