对于我的荣誉项目,我正在研究处理大学生命科学部门内质谱仪(MS)产生的大量数据的方法。
我一直在阅读《 MapReduce设计模式与Hadoop:权威指南》,并且试图将所需的数据连接到特定的Map&Reduce模式。
第一步是找到每条曲线的加权峰值。执行计算以将诸如最大/最小,平均值之类的信息将6或7点(行)减少为单个点。
100312_EXP229_GFPIP_5,1,0.00056783449000000002,0,402.0745297608135,1135.039794921875,1,0,0,0,0,0
对于每个记录,它属于哪个曲线。
我的问题是大多数示例似乎都是逐行处理问题,例如字数。尽管我不确定这是否是解决此问题的正确方法,但我一次需要处理N行。
谢谢!
最佳答案
在您的情况下,逐行处理文件并在映射器中为每行输出<curve, point>
应该足够了。 reducer 将接收所有点,这些点属于一条曲线:<curve, {point1, point2, ... }>
作为输入。因此,您可以根据 reducer 中曲线的点计算最大/最小/平均,并输出<curve, max/min/avg>
作为最终结果。
PS。为了在每个映射器中准确处理输入文件的N
行,可以使用NLineInputFormat。