在hadoop应用程序中读取和写入CSV文件

在hadoop应用程序中读取和写入CSV文件,csv,hadoop,file-io,mapreduce,Csv,Hadoop,File Io,Mapreduce,我需要处理自定义csv文件作为输入,并将csv文件写回HDFS。我可以直接在map reduce类中进行此操作吗 为了处理我的csv文件,我使用opencsv库。我看过一些教程,其中他们使用inputformat和outputformat标志来指定处理用户定义格式的java类。有人能就如何使用csv文件给出建议吗 我想坚持hadoop提供的功能,否则我自己的输入和输出格式实现可能会使我的处理速度变慢。问题是您是否需要多行csv 如果您不需要它-您可以使用vanilla TextInputForm

我需要处理自定义csv文件作为输入,并将csv文件写回HDFS。我可以直接在map reduce类中进行此操作吗

为了处理我的csv文件,我使用opencsv库。我看过一些教程,其中他们使用inputformat和outputformat标志来指定处理用户定义格式的java类。有人能就如何使用csv文件给出建议吗


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

问题是您是否需要多行csv
如果您不需要它-您可以使用vanilla TextInputFormat和TextOutputFormat,并在映射器中使用opencsv解析行。对于输出文本,OutputFormat也很好

如果你需要多行-有一些黑客你必须做组装的逻辑记录。您可以为它创建自己的输入格式,也可以在mapper中进行

多行csv是什么意思?它就像field1,field2,field3;1,2,3;4,5,6; 一个CSV文件就像一个大矩阵,其中的每个元素用逗号或特定字符分隔。您是说多行属性吗?在CSV格式中,当字段位于QOUTING标记内时,我们可以将EOL符号作为字段内容的一部分。它使单个CSV记录跨越多行,因此不能假设一条记录=一行。OpenCSV具有处理多行csv的特殊选项。在通常的csv中,每行是您提到的矩阵的一行。在多行中-情况并非如此。明白了。在我的例子中,每一行都包含一条特定的记录。因此,我可以使用普通的TextInputFormat和TextOutputFormat,甚至可以使用标记化的字符串逐行读取它。也许我想的太复杂了。谢谢你能链接到你正在引用的教程吗?我必须说,我找不到我刚才提到的那个,清除了浏览器中的缓存,再也找不到博客中的那个。但与此类似的是