Здравствуйте, я новичок в мире hadoop. Я научился делать WordCount. чтобы сделать это на ступеньку выше, я узнаю, как обрабатывать XML-данные. и картограф, который я использую, это
public static class Map extends Mapper<LongWritable, Text,
Text, IntWritable> {
private final static IntWritable one = new IntWritable(1);
@Override
protected void map(LongWritable key, Text value,
Mapper.Context context)
throws
IOException, InterruptedException {
String document = value.toString();
System.out.println("‘" + document + "‘");
try {
XMLStreamReader reader =
XMLInputFactory.newInstance().createXMLStreamReader(new
ByteArrayInputStream(document.getBytes()));
String propertyKey = "";
String currentElement = "";
while (reader.hasNext()) {
int code = reader.next();
switch (code) {
case XMLStreamConstants.START_ELEMENT: //START_ELEMENT:
currentElement = reader.getLocalName();
break;
case XMLStreamConstants.CHARACTERS: //CHARACTERS:
if (currentElement.equalsIgnoreCase("value")) {
propertyKey += reader.getText();
System.out.println("value"+propertyKey);
} else if (currentElement.equalsIgnoreCase("name")) {
propertyKey += reader.getText();
System.out.println("name"+propertyKey);
}
break;
}
}
reader.close();
context.write(new Text(propertyKey.trim()), one);
}
catch(Exception e){
throw new IOException(e);
}
}
}
Мой ввод - это xml-файл:
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop_tmp/hdfs/namenode</value>
</property>
</configuration>
проблема с этим картографом в том, что я не получил значение для некоторых ключей. вывод, который я получаю, это
dfs.namenode.name.dir
файл: / usr / local / hadoop_tmp / hdfs / namenode 1
dfs.replication
1 1
вывод отображаемого файла, который я хочу,
dfs.namenode.name.dir 1
файл: / usr / local / hadoop_tmp / hdfs / namenode 1
dfs.replication 1
1 1
У кого-нибудь есть предложения, как это решить?
заранее спасибо.