2012-06-04 178 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的特殊選項。 –