如何使用Amazon mapreduce解析freebase四元组转储

时间:2012-03-07 14:11:37

标签: mapreduce freebase elastic-map-reduce

我试图从freebase中提取电影信息,我只需要电影的名称,导演和演员的名字和身份。

我发现使用freebases主题转储很难做到这一点,因为没有对导演ID的引用,只有导演名称。

这项任务的正确方法是什么?我是否需要使用亚马逊云以某种方式解析整个四轮转储?或者有一些特别的方式吗?

2 个答案:

答案 0 :(得分:2)

您确实需要使用四重转储,但它低于4 GB,不应要求Hadoop,MapReduce或任何云处理。一台体面的笔记本应该没问题。在几年前的笔记本电脑上,这个简单的命令:

time bzgrep '/film/' freebase-datadump-quadruples.tsv.bz2 | wc -l
10394545

real    18m56.968s
user    19m30.101s
sys 0m56.804s

在20分钟内提取并计算引用电影域的所有内容。即使你必须在文件中进行多次传递(很可能),你也可以在不到一个小时的时间内完成整个任务,这意味着不需要强大的计算资源。

你需要遍历一个中间节点(Freebase-speak中的CVT)来获取演员,但是你的其他信息应该直接连接到主题电影节点。

汤姆

答案 1 :(得分:2)

首先,我完全赞同汤姆的观点和他的建议。我经常使用UNIX命令行工具从Freebase数据转储中获取“有趣”的数据片段。

但是,另一种方法是将Freebase数据加载到本地的“图形”存储系统中,并使用API​​和/或该系统提供的查询语言与数据进行交互以进行进一步处理。

我使用RDF,因为数据模型非常相似,很容易将Freebase数据转换转换为RDF(参见:https://github.com/castagna/freebase2rdf)。然后我将它加载到Apache Jena的TDB商店(http://incubator.apache.org/jena/documentation/tdb/)并使用Jena API或SPARQL进行进一步处理。

另一种合理且可扩展的方法是在MapReduce中实现您需要做的事情,但这只有在您执行的处理量接触大部分Freebase数据并且不像计算行数那么简单时才有意义。这比使用自己的机器更昂贵,您需要Hadoop集群或者您需要使用Amazon EMR。 (我应该写一个mapReduce版本的freebase2rdf; - ))

我的2美分。