自定义INputFormat,hadoop

时间:2012-07-27 19:05:23

标签: java hadoop mapreduce customization

请帮忙, 我有以下示例数据:

-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代码应该将前两个float条目视为键(-21.33,45.677),将剩余的整数条目视为值(1234,1245,1267,1290,1212,1111,10000,1902)

我不确定是否可以使用现有的FileInputFormats完成。 那么我怎么知道这个值应该用作数组而不是文本。

此外,我应该如何更改inputSplit,以便我能够在地图中同时获取多条记录以进行计算。

3 个答案:

答案 0 :(得分:1)

最简单的方法是使用TextInputFormat并让映射器在键和值之间进行拆分。 然后,映射器的输出键和值都可以是Text。

答案 1 :(得分:0)

您有什么理由不能只使用TextInputFormat的<LongWritable, Text>输入类型,并相应地执行提取和转换?

如果真的不可接受,那么考虑使用ChainMapper - 使用一个地图进行提取,然后将这些结果传递给另一个期望所需键/值的mappert。

答案 2 :(得分:0)

最简单的方法是将分隔符拆分为“,”。然后在您的映射器中,只需获取前两个值并附加它们以生成密钥。您必须使用Text,因为您需要一个与您的Key对应的值。将密钥转换回数值需要一些计算。