【发布时间】:2013-09-16 04:55:13
【问题描述】:
我从 Freebase 下载了 rdf 数据转储,我需要提取的是 Freebase 中每个实体的英文名称。
我是否必须使用 Hadoop 和 MapReduce 来执行此操作,如果需要,如何操作?还是有其他方法可以提取实体名称?
如果每个实体标题/名称都在 .txt 文件中的单独行中,那就太好了
【问题讨论】:
标签: hadoop mapreduce bigdata freebase elastic-map-reduce
我从 Freebase 下载了 rdf 数据转储,我需要提取的是 Freebase 中每个实体的英文名称。
我是否必须使用 Hadoop 和 MapReduce 来执行此操作,如果需要,如何操作?还是有其他方法可以提取实体名称?
如果每个实体标题/名称都在 .txt 文件中的单独行中,那就太好了
【问题讨论】:
标签: hadoop mapreduce bigdata freebase elastic-map-reduce
您可以使用 Hadoop,但对于如此简单的处理,您将花费更多时间来解压缩和拆分输入,而不是在并行搜索方面节省的时间。一个简单的zgrep 将在更短的时间内完成您的任务。
类似这样的事情:
zegrep $'name.*@en\t\\.$' freebase-public/rdf/freebase-rdf-2013-09-15-00-00.gz | cut -f 1,3 | gzip > freebase-names-20130915.txt.gz
将为您提供 Freebase MID 及其英文名称的压缩两列文件。您可能希望使 grep 更具体一点,以避免误报(并对其进行测试,我还没有做过)。此文件已压缩超过 20GB,因此需要一段时间,但比开始准备 Hadoop 作业的时间还要短。
如果您想进行额外的过滤,例如仅提取类型为 /common/topic 的实体,您可能会发现您需要迁移到 Python 等脚本语言,以便能够一次跨多行查看和评估.
【讨论】:
grep $'name.*@en\t\\.$' freebase-rdf | cut -f 1,3 | gzip > freebase-names-20130915.txt.gz 时,我得到的只是一个空文件 freebase-name-20130915.txt.gz,当我解压缩时,我得到一个 .cpgz 文件,里面是 .txt.gz文件,它会永远持续下去。
不,我认为您不需要使用 Hadoop 和 MapReduce 来执行此操作。您可以轻松创建 Web 服务来提取 RDF 并发送到文件。以下 [1] 博客文章解释了如何使用 WSo2 数据服务服务器提取 RDF 数据。同样,您可以使用 WSO2 DSS 数据联合 [2] 功能提取 RDF 数据并将其发送到 excel 数据表
[1] - http://sparkletechthoughts.blogspot.com/2011/09/extracting-rdf-data-using-wso2-data.html
[2] - http://prabathabey.blogspot.com/2011/08/data-federation-with-wso2-data-service.html
【讨论】:
还有一个用于 Google Compute Engine 的 screencast,它也向您展示了如何执行此操作。
【讨论】:
grep $'name.*@en\t\\.$' freebase-rdf | cut -f 1,3 | gzip > freebase-names-20130915.txt.gz 知道为什么会创建一个包含空 .cpgz 的空 .txt.gz 吗?它们(空目录)无限地相互包含。