在Hadoop应用程序中读写CSV文件

3

我需要处理定制的csv文件作为输入,并将csv文件写回HDFS。我能否直接在map reduce类中处理这一过程?

为了处理我的csv文件,我正在使用opencsv库。我看到一些教程中使用inputformat和outputformat标志来指定处理用户定义格式的Java类。有人能否提供如何处理csv文件的建议?

我想坚持使用hadoop提供的工具,否则我自己实现的输入输出格式可能会使我的处理变慢。


你能提供你参考的教程链接吗? - Chris White
我必须说我找不到我提到的确切内容,已经清除了浏览器缓存,无法再次找到该博客。但是类似于这个链接的内容。http://blog.aggregateknowledge.com/2011/08/30/custom-inputoutput-formats-in-hadoop-streaming/ - Bob
1个回答

4
问题是您是否需要多行csv。如果不需要,您可以使用普通的TextInputFormat和TextOutputFormat,并在mapper内部使用opencsv解析行。对于输出,TextOutputFormat也完全可以胜任。如果您需要多行 - 您需要做一些黑客工作来组装逻辑记录。您可以为此创建自己的输入格式,或在mapper内部完成。

多行CSV是什么意思?它类似于field1,field2,field3; 1,2,3; 4,5,6;等等... - Bob
一个CSV文件就像一个大矩阵,其中每个元素都由逗号或特定的分隔符分隔。你是指多行属性吗? - Bob
2
在CSV格式中,当字段被引号包含时,我们可以将EOL符号作为字段内容的一部分。这使得单个CSV记录跨越多行,因此您不能假设一个记录等于一行。OpenCSV有特殊选项来处理多行CSV。 - David Gruzman
在通常的CSV中,每一行都是你提到的矩阵的一行。但在多行情况下,情况并非如此。 - David Gruzman
明白了。在我的案例中,每一行都包含一个特定的记录。因此,我可以使用普通的TextInputFormat和TextOutputFormat,甚至可以使用String tokenized逐行读取它。也许我想得太复杂了。谢谢! - Bob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接