Как вывести заголовок на мою карту / сократить задание только один раз, чтобы использовать его как CSV для импорта куста вместо ручного ввода имен столбцов.
открытый класс MyMapper расширяет Mapper {
public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
try {
InputStream is = new ByteArrayInputStream(value.toString().getBytes());
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(is);
//....
doc.getDocumentElement().normalize();
// .......
//context.write(new Text("el_from \t Title \t External Link"), NullWritable.get());
// ....
String title = eElement.getElementsByTagName("title").item(0).getTextContent();
text = eElement.getElementsByTagName("text").item(0).getTextContent();
String id = eElement.getElementsByTagName("id").item(0).getTextContent();
for(int j = 0; j < externalLinks.length; j++)
{
Pattern prl = Pattern.compile("(http:\\/\\/www\\.|https:\\/\\/www\\.|http:\\/\\/|https:\\/\\/)?[a-z0-9]+([\\-\\.]{1}[a-z0-9]+)*\\.[a-z]{2,5}(:[0-9]{1,5})?");
Matcher ml = prl.matcher(externalLinks[j]);
if(ml.find()) {
MatchResult mlr = ml.toMatchResult();
context.write(new Text(id+","+title + ","+ mlr.group(0)), NullWritable.get());
}
}
}
}
} catch (Exception e) {
// LogWriter.getInstance().WriteLog(e.getMessage());
}
}
}`enter code here`
Результат, который я получил, такой:
3, agricoltura, http://www.treccani.it
3, agricoltura, http://www.wwf.it/client/render.aspx
Результат, который я хочу, похож на приведенный ниже заголовок
id, title, link
3, agricoltura http://www.treccani.it
3, agricoltura http://www.wwf.it/client/render.aspx