对于我的荣誉项目,我正在研究处理大学生命科学系内质谱仪(MS)产生的大量数据的方法。
我一直在阅读MapReduce Design Patterns& Hadoop:The Definitive Guide,我正在尝试将我拥有的数据连接到特定的地图&减少模式。
第一步是找到每条曲线的 加权峰值 。执行计算以将6或7个点(行)减少到单个点,并使用max / min,average等信息。
数据为~8GB CSV文件,如下所示:
100312_EXP229_GFPIP_5,1,0.00056783449000000002,0,402.0745297608135,1135.039794921875,1,0,0,0,0,0
每一行基本上都是图表上的一个点,X& Y coords。
这些点按其中一列分组为曲线。所以我知道 对于每条记录,它属于哪条曲线。
每条曲线的点数不一,通常在4-8点左右。
我的问题是大多数示例似乎都是逐行处理问题,例如字数。我需要一次处理N行,但我不确定这是否是解决此问题的正确方法。
谢谢!
答案 0 :(得分:3)
在您的情况下,应该足以逐行处理文件,并为映射器中的每一行输出<curve, point>
。 reducer将接收所有属于单曲线的点:<curve, {point1, point2, ... }>
作为输入。因此,您可以根据缩减器中曲线的点数计算最大值/最小值/平均值,并输出<curve, max/min/avg>
作为最终结果。
PS。要在每个映射器中处理输入文件的N
行,您可以使用NLineInputFormat。