如何从tsv文件创建用于文本分类的序列文件

esyap4oy  于 2021-06-04  发布在  Hadoop
关注(0)|答案(2)|浏览(307)

我有一个tsv文件是分开的类,id和文本,例如。

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

我试着给mahout的nbayes分类文本部分pos或neg。
我的第一次尝试是在每一行上使用mahout seqdirectory命令作为类目录中的一个独立文件。这在处理少量数据时效果很好,但最终在处理30GB左右的数据时失败,并出现outofmemoryexception。增加堆大小失败,并“超出gc开销限制”,可能是因为存在大量的独立文件。
我的第二次尝试是将数据加载到一个配置单元表中,并将其转换为一个序列文件,如本文[0]所述,该文件一开始似乎工作正常,但在创建向量文件并拆分数据集之后,trainnb步骤失败,出现了arrayindexoutofbounds异常。
[0] http://files.meetup.com/6195792/working%20with%20mahout.pdf
现在我不知道该找什么了。知道如何将tsv文件或配置单元表转换为seqdirectory命令在目录上生成的sequencefile吗?

guz6ccqo

guz6ccqo1#

如果其他人需要解决相同或类似的问题,我会自己回答:
我在github找到了这个代码片段,并根据自己的需要对其进行了修改。此外,我必须修剪值字符串以获得正确的结果。

jtjikinw

jtjikinw2#

对于将来寻找这个答案的人来说,这可能是一个更简单的实现。这完全可以从命令行完成(我在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是amazonemr(ami3.4.0)上hadoop-streaming.jar的位置。它可能位于不同的位置,具体取决于您的配置。

相关问题