【发布时间】:2018-07-02 20:18:01
【问题描述】:
我怎样才能在我的 map/reduce 作业上输出一个标题,只使用一次作为配置单元导入的 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、标题、链接
3,agricoltura,http://www.treccani.it
3,agricoltura,http://www.wwf.it/client/render.aspx
【问题讨论】:
-
你能告诉我们你的尝试吗?
-
@Dragonthoughts 抱歉,我现在已经编辑了我的问题并添加了一段代码
-
感谢@KlingKlang。是一个错字