java - 带有 RDF/XML 文件的 Hadoop MapReduce

标签 java xml hadoop mapreduce rdf

所以我有十个不同的文件,每个文件看起来像这样。

<DocID1>    <RDF Document>
<DocID2>    <RDF Document>
.
.
.
.
<DocID50000>    <RDF Document>

实际上每个文件大约有 56,000 行。每行都有一个文档 ID 和一个 RDF 文档。

我的目标是将每个映射器作为输入键值对传递给每个映射器,并为输出键值对发出多个映射器。在 reduce 步骤中,我会将这些存储到 Hive 表中。

我有几个入门问题,而且我对 RDF/XML 文件完全陌生。

  1. 我应该如何解析文档的每一行以分别传递给每个映射器?

  2. 是否有一种有效的方法来控制映射器的输入大小?

最佳答案

1- 如果您使用的是 TextInputFormat,您将在每个映射器中自动获得 1 行(1 次拆分)作为值。将此行转换为 String 并进行所需的处理。或者,您可以通过使用 StreamXmlRecordReader 来使用 Hadoop Streaming API .您必须提供开始和结束标记,并且夹在开始和标记之间的所有信息都将提供给映射器(在您的情况下为 <DocID1><RDF Document>)。

Usage :

hadoop jar hadoop-streaming.jar -inputreader "StreamXmlRecord,begin=DocID,end=RDF Document" ..... (rest of the command)

2- 为什么需要它?您的目标是将完整的一行提供给映射器。这是您正在使用的 InputFormat 的工作。如果您仍然需要它,您必须为此编写自定义代码,对于这种特殊情况,它会有点棘手。

关于java - 带有 RDF/XML 文件的 Hadoop MapReduce,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17116046/

相关文章:

hadoop - 如何安装 Hadoop 插件或补丁?

android - 删除 SeekBar 中的顶部和底部填充

hadoop - HDFS 中文件的 ctime

java - MyBatis 完整注释配置以检索 OUT 参数中的存储过程结果?

Java JLabel 和 JTextField 定位

c# - Xml 文档不应该作为 String 传递,如何激励?

php - 在 PHP 中创建 XML 文档

java - 如何根据大小拆分 ORC 文件?

java - 如何在liferay portlet中获取页面的组织方式?

java - 生成随机日期