由于映射器函数为每一行运行,我能知道如何跳过第一行吗?对于某些文件,它由我想忽略的列标题组成
在映射器中读取文件时,数据作为键值对读取。键是下一行开始的字节偏移量。对于第 1 行,它始终为零。所以在映射器函数中执行以下操作
@Override
public void map(LongWritable key, Text value, Context context) throws IOException {
try {
if (key.get() == 0 && value.toString().contains("header") /*Some condition satisfying it is header*/)
return;
else {
// For rest of data it goes here
}
} catch (Exception e) {
e.printStackTrace();
}
}
由于文件可以存储在多个节点中,因此我们无法说标头部分存在于哪台机器中以及哪个映射器正在处理该文件的该部分。我们可以过滤掉映射器本身中的标头。为此,您必须知道标题。例如
String[] cols= line.tokenize();
if(cols[0].equals("header")) {
// skip
} else {
// emit
}