我有一个制表符分离的输入文件,从那里我在Map减少阅读2列。1列是键,另一列是值。因此,我的要求是,如果值为空,即它包含空格、制表符或任何其他字符,即使键也不应该被处理到reducer中。总的来说,它应该丢弃该记录并获取下一个有值的记录。已经编写了以下代码,但它不起作用。它执行所有记录。它不过滤任何东西。
public static class Map extends Mapper<LongWritable, Text, Text,Text>
{
private Text vis = new Text();
private Text eValue = new Text();
public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException
{
String line=value.toString();
String[] arr=line.split("\t");
vis.set(arr[8]);
eValue.set(arr[287]);
if (!eValue.equals("\t") || eValue.equals(" "))
{
context.write(vis,eValue);
}
}
}
感谢您的帮助。提前谢谢。
ps:我正在使用hadoop-2.6.0
3条答案
按热度按时间vsdwdz231#
你在设计上做得对。然而,如果条件不是你所期望的,我想。如果你有一个空值,首先要了解你在Map上得到了什么值。一旦你根据'\t'分开,你怎么能期望它仍然存在于单个单词中呢。再想一想,修改if条件。
vql8enpb2#
你得再检查一次
求值等于(“”)
此外,not条件仅适用于\t。您需要将所有条件的值放在一起(如果您的要求是用空格/tab/empty省略所有值)。
quhf5bfb3#
您可以使用下面的语句而不是多个检查条件。