2013-07-17 75 views
1

我是新來的壺,但迄今相處得很好。但我無法弄清楚如何做到這一點。Pentaho Kettle將CSV分成多個記錄

我有一個CSV文件看起來像這樣

a, col1, col2, col3 
a, col1, col2, col3 
a, col1, col2, col3 
b, col1, col2, col3 
b, col1, col2, col3 
c, col1, col2, col3 
c, col1, col2, col3 

第一列開始用鑰匙(A,B,C),然後將其餘列如下。我想要做的是在csv中讀取(得到了這個),然後根據key分割csv,所以我有3個塊/數據組,然後將每個這些數據塊轉換成一個單獨的json文件,I認爲我可以得到。

我無法得到我的頭是分組的數據,然後執行單獨的行動(轉換爲json)在每個單獨的組。它不是創建json我有一個問題。

該數據來自許多環境傳感器的傳感器網絡,因此有許多密鑰,數百個和新的密鑰都被添加。我之前使用map reduce來處理這些數據,因爲分區的概念就是我想在這裏複製的內容,而不是使用水壺的hadoop元素,因爲部署是不同的。一旦我分割了數據,它就需要作爲單獨的記錄加載到不同的地方。密鑰是傳感器的唯一ID(序列號)。

有什麼想法嗎?

感謝

+0

你看過Switch/Case語句嗎?如果不是,我們需要更多有關您的數據和您想要做的事情的信息。例如,有多少個不同的鍵值可以做,以及爲什麼需要根據鍵來分割。 –

+0

請參閱編輯以提問。 – David

+0

有多少個不同的分區? –

回答

1

我想在一個JSON創建一個JavaScript輸出行的字段,如字符串添加到該行:

{"id":"a","col1":"1","col2":"2","col3":"3"} 

接下來,您可以使用組的步驟和設置基本場在「ID」字段,並作爲聚集型的JavaScript值

{"id":"a","col1":"1","col2":"2","col3":"3"},{"id":"a","col1":"4","col2":"5","col3":"6"}, {"id":"a","col1":"7","col2":"8","col3":"9"} 

「連接字符串通過分隔」添加周圍的一些標籤,你有有效的JSON。接下來,您可以使用javascript步驟組裝文件名:

var file_name="C:\\dir\\"+ id + ".txt"; 

使用文本文件輸出並將文件名字段設置爲'file_name'。刪除分隔符/機箱選項以使其不需要額外格式化即可完成。

1

如果我已經正確理解你的問題,可以使用「GROUP BY」步驟對列(即數據集中的第一個標題)進行分組,然後將它們存儲到內存中。

enter image description here

一旦做到這一點..使用參數循環「獲取變量」和動態生成多個JSON輸出。檢查下面的圖片:

enter image description here

在JSON輸出步驟,使用變量像頭1生成多個文件。突出顯示在JSON輸出中所做的更改下方。

enter image description here

如果你在混亂的發現,我已經在here上傳一個示例代碼。

希望它有幫助:)