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