【问题标题】:How to create sequence files from tsv file for text classification如何从 tsv 文件创建序列文件以进行文本分类
【发布时间】:2015-03-12 04:48:13
【问题描述】:

我有一个 tsv 文件,它在类、id 和文本中分开,例如

positive    2342    This is very good.
negative    4343    I hate it.

我正在尝试输入 Mahout 的 nbayes 以将文本部分分类为 pos 或 neg。

我的第一次尝试是在每一行上使用 mahout seqdirectory 命令作为其类目录中的单独文件。这适用于少量数据,但最终在大约 30 GB 的数据时会因 OutOfMemoryException 而失败。增加堆大小失败并显示“超出 GC 开销限制”可能是因为大量单独的文件。

我的第二次尝试是将数据加载到配置单元表中并将其转换为序列文件,如此处所述 [0],起初似乎工作正常,但在创建矢量文件并拆分数据集之后trainnb 步骤因 ArrayIndexOutOfBounds 异常而失败。

[0]http://files.meetup.com/6195792/Working%20With%20Mahout.pdf

现在我不知道要寻找什么。任何想法如何将 tsv 文件或配置单元表转换为序列文件,因为它是由目录上的 seqdirectory 命令生成的?

【问题讨论】:

    标签: apache hadoop machine-learning mahout


    【解决方案1】:

    如果其他人需要解决相同或相似的问题,我会自己回答:

    我找到了这个代码 sn-p at github 并根据我的需要对其进行了修改。此外,我必须修剪值字符串以获得正确的结果。

    【讨论】:

      【解决方案2】:

      对于那些在未来寻找这个答案的人来说,这可能是一个更简单的实现。这可以完全从命令行完成(我在 EMR 中测试过):

      hadoop jar \
       /home/hadoop/contrib/streaming/hadoop-streaming.jar \
       -D mapred.reduce.tasks=0 \
       -inputformat TextInputFormat \
       -input {input_directory}/* \
       -mapper '/bin/cat' \
       -outputformat org.apache.hadoop.mapred.SequenceFileOutputFormat \
       -output {output_directory}
      

      /home/hadoop/contrib/streaming/hadoop-streaming.jar 是 Amazon EMR (AMI 3.4.0) 上 hadoop-streaming.jar 的位置。根据您的配置,它可能位于不同的位置。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-10-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-27
        • 1970-01-01
        • 2017-09-08
        相关资源
        最近更新 更多