在我的荣誉项目中,我正在研究处理大学生命科学系内质谱仪 (MS) 产生的大量数据的方法。
我一直在阅读 MapReduce 设计模式和 Hadoop:权威指南,我正在尝试将我拥有的数据连接到特定的映射和减少模式。
第一步是为每条曲线找到加权峰值。执行计算以将 6 或 7 个点(行)减少为具有最大/最小值、平均值等信息的单个点。
数据位于 ~8GB CSV 文件中,如下所示:
100312_EXP229_GFPIP_5,1,0.00056783449000000002,0,402.0745297608135,1135.039794921875,1,0,0,0,0,0
每一行基本上都是图表上的一个点,具有 X 和 Y 坐标。
这些点按其中一列分组为曲线。所以我知道 对于每条记录,它属于哪条曲线。
每条曲线的点数不同,一般在4-8点左右。
我的问题是大多数示例似乎都是逐行处理问题,例如字数。我需要一次处理 N 行,但我不确定这是否是解决此问题的正确方法。
谢谢!
最佳答案
在您的情况下,逐行处理文件并为每一行输出处理文件就足够了 <curve, point>
在你的映射器中。 reducer 将接收属于一条曲线的所有点:<curve, {point1, point2, ... }>
作为输入。因此,您可以根据 reducer 中曲线的点计算最大/最小/平均值并输出 <curve, max/min/avg>
作为最终结果。
附言。恰为加工N
每个映射器中输入文件的行,您可以使用 NLineInputFormat .
关于design-patterns - 选择 MapReduce 设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15031066/