2012-07-27 48 views
0

請幫幫忙,我 有下面的示例數據:定製INputFormat,Hadoop的

-21.33,45.677,1234,1245,1267,1290,1212,1111,10000,1902 
-21.34,45.677,1264,1645,1266,1260,1612,1611,16000,1602 
-21.35,45.677,1244,1445,1467,1240,1242,1211,11000,1912 
-21.36,45.677,1231,1215,1217,1210,1212,1111,10010,1902 

我想,我的Hadoop MapReduce的代碼首先應該考慮的兩條浮法項爲重點(-21.33,45.677)和剩餘的整數項作爲值(1234,1245,1267,1290,1212,1111,10000,1902)。

我不確定它是否可以使用現有的FileInputFormats完成。 那麼我應該如何去知道這個值應該被用作數組而不是文本。

另外我該如何改變inputSplit,使我能夠在地圖上同時獲取多條記錄進行計算。

+0

有人應該回復此問題,請 – 2012-07-27 21:04:06

+1

請不要重複發佈重複項 - http://stackoverflow.com/questions/11689972/customizing-inputformat-in-hadoop – 2012-07-27 22:05:47

回答

1

最簡單的方法是使用TextInputFormat並讓您的映射器在鍵和值之間進行分割。 然後您的映射器的輸出鍵和值都可以是文本。

+0

我一直在猶豫,因爲它會是一個額外的計算。所以我希望有一些自定義的數據類型可以直接從我的輸入文件中讀取,我可以爲它編寫映射器。 – 2012-07-30 17:55:04

0

爲什麼你不能只使用TextInputFormat的<LongWritable, Text>輸入類型,並相應地執行提取和轉換?

如果確實不可接受,請考慮使用ChainMapper - 使用一個映射進行提取,然後將這些結果傳遞給期望所需的鍵/值的另一個映射器。

0

最簡單的方法是將分隔符分隔爲','。然後在你的映射器中只取前兩個值並附加它們來製作密鑰。您必須使用文本,因爲您需要與您的密鑰對應的一個值。一些計算將需要將密鑰轉換回數值。