【问题标题】:custom INputFormat, hadoop自定义输入格式,hadoop
【发布时间】:2012-07-27 19:05:22
【问题描述】:

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

-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 以便我能够在地图中同时获取多条记录进行计算。

【问题讨论】:

标签: java hadoop mapreduce customization


【解决方案1】:

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

【讨论】:

  • 我犹豫要不要使用它,因为这将是一个额外的计算。所以我希望有一些自定义数据类型可以直接从我的输入文件中读取为数组,我可以为此编写映射器。
【解决方案2】:

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

如果这确实不可接受,则考虑使用ChainMapper - 使用一个映射进行提取,然后将这些结果传递给另一个期望所需键/值的映射器。

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-30
      • 1970-01-01
      • 1970-01-01
      • 2015-06-30
      • 1970-01-01
      相关资源
      最近更新 更多