2012-07-27 45 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

最简单的方法是将分隔符分隔为','。然后在你的映射器中只取前两个值并附加它们来制作密钥。您必须使用文本,因为您需要与您的密钥对应的一个值。一些计算将需要将密钥转换回数值。