我有一个tsv文件,它在class,id和text中分开,例如
positive 2342 This is very good.
negative 4343 I hate it.
我正在尝试提供Mahout的nbayes来对文本部分进行pos或neg分类。
我的第一次尝试是在每个行上使用mahout seqdirectory命令作为其类目录中的单独文件。这适用于少量数据但最终在OutOfMemoryException下大约30 GB的数据失败。由于存在大量单独的文件,增加堆大小会因“超出GC开销限制”而失败。
我的第二次尝试是将数据加载到配置单元表并将其转换为序列文件,如此处所述[0],它似乎首先工作正常,但在创建矢量文件并拆分数据集之后trainnb步骤因ArrayIndexOutOfBounds异常而失败。
[0] http://files.meetup.com/6195792/Working%20With%20Mahout.pdf
现在我不知道该寻找什么。有关如何将tsv文件或hive表转换为序列文件的任何想法,因为它是由目录上的seqdirectory命令生成的?
答案 0 :(得分:0)
如果其他人需要解决相同或类似的问题,请自行回答:
我找到了此代码段at github并根据我的需要对其进行了修改。另外,我必须修剪值字符串以获得正确的结果。
答案 1 :(得分:0)
对于那些在将来搜索此答案的人来说,这可能是一个更简单的实现。这可以完全从命令行完成(我在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的位置。根据您的配置,它可能位于不同的位置。