2012-06-04 90 views
2

我需要处理自定义csv文件作为输入并将csv文件写回HDFS。我可以直接在真正发生地图缩小类的地方做这个吗?在hadoop应用程序中读取和写入CSV文件

为了处理我的csv文件,我使用了opencsv库。我看过一些教程,他们使用inputformat和outputformat标志来指定处理用户定义格式的java类。有人可以提供关于如何使用CSV文件的建议吗?

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

+0

你能链接到你正在引用的教程吗? –

+0

http://blog.aggregateknowledge.com/2011/08/30/custom-inputoutput-formats-in-hadoop-streaming/,我必须说,我无法找到我提到的确切的一个,清除了我的缓存浏览器,再次找不到确切的博客。但类似于这个 – Bob

回答

3

问题是如果你需要多行csv或没有。
如果您不需要它 - 您可以使用vanilla TextInputFormat和TextOutputFormat,并在映射器中使用opencsv来分析行。对于输出TextOutputFormat也很好
如果你需要多行 - 你必须做一些黑客来组装逻辑记录。您可以为它创建自己的输入格式,或者在映射器中执行。

+0

你是什么意思与多线csv?它就像field1,field2,field3; 1,2,3; 4,5,6; etc ... – Bob

+0

一个CSV文件就像一个大矩阵,其中的每个元素用逗号或特定的特定字符分隔。你的意思是多线这个属性? – Bob

+1

在CSV格式中,当字段位于qoutation标记内时,我们可以将EOL符号作为字段内容的一部分。它使单个CSV记录跨越多行,因此您不能假设一条记录=一行。 OpenCSV有处理多行csv的特殊选项。 –