背景:
我正在尝试使用MapReduce在Hadoop上的Java中创建一个“文档术语”矩阵.文档术语矩阵就像一个巨大的表,其中每一行代表一个文档,每一列代表一个可能的单词/术语.
问题陈述:
假设我已经有一个术语索引列表(这样我就知道哪个术语与哪个列号相关联),那么在每个文档中查找每个术语的索引的最佳方法是什么,以便我可以逐行构建矩阵行(即逐个文档)?
到目前为止,我可以想到两种方法:
方法1:
将术语索引列表存储在Hadoop分布式文件系统上.映射器每次读取新文档进行索引时,都会生成一个新的MapReduce作业-该文档中每个唯一单词的作业,其中每个作业都在分布式术语表中查询其术语.这种方法听起来有点过分,因为我猜测开始新工作会带来一些开销,并且由于这种方法可能需要数以千万计的工作.另外,我不确定是否可以在另一个MapReduce作业中调用MapReduce作业.
方法2:
将术语索引列表追加到每个文档,以便每个映射器以术语索引列表的本地副本结尾.这种方法在存储上非常浪费(术语索引列表的副本与文档一样多).另外,我不确定如何将术语索引列表与每个文档合并-我将它们合并在映射器中还是化简器中?
问题更新1
输入文件格式:
输入文件将是包含所有文档(产品评论)的CSV(逗号分隔值)文件.文件中没有列标题,但是每个评论的值按以下顺序显示:product_id,review_id,评论,星号.下面是一个伪造的示例:
<“Product A”, “1”,“Product A is very, very expensive.”,”2”
“Product G”, ”2”, “Awesome product!!”, “5”