如何在map中选择最佳键减少?

时间:2013-07-11 17:58:30

标签: java hadoop mapreduce query-optimization sybase

我正在处理股票交易日志文件。每行表示具有20个制表符分隔值的交易事务。我正在使用hadoop来处理这个文件并做一些交易基准测试。现在,对于每一行,我必须执行单独的基准计算,因此map-reduce中不需要reduce函数。为了执行每行的基准计算,我必须查询Sybase数据库以获得与该行对应的一些标准值。数据库的索引是每行的两个值[交易ID和库存ID]。现在我的问题是我应该在mapreduce程序中使用tradeId和StockId作为关键字,还是应该为我的密钥选择其他值/ [值组合]。

1 个答案:

答案 0 :(得分:0)

因此,对于每一行输入,您将查询数据库,然后分别对每一行执行基准计算。完成基准计算后,您将输出具有基准值的每一行。

在这种情况下,您可以根本不使用reducer,也可以使用identity reducer。

因此,您的map函数将在一行中读取,然后它将向Sybase数据库发出查询以获取标准值,然后执行基准计算。由于您希望输出具有基准值的每一行,您可以让Map函数输出该行作为键,将基准值作为值输出,即<line, benchmark value>

你的地图功能看起来像这样:(我假设你的基准值是一个整数)

public void map(Text key, IntWritable value, Context context) throws Exception {
    String line = value.toString();   //this will be your key in the final output

     /* 
         Perform operations on the line

      */

      /* 

         standard values = <return value from sybase query.>;

      */

      /*Perform benchmark calculations and obtain benchmark values */

      context.write(line,benchmarkValue);     




}