对于我的荣誉项目,我正在研究处理大学生命科学部门内质谱仪(MS)产生的大量数据的方法。

我一直在阅读《 MapReduce设计模式与Hadoop:权威指南》,并且试图将所需的数据连接到特定的Map&Reduce模式。

第一步是找到每条曲线的加权峰值。执行计算以将诸如最大/最小,平均值之类的信息将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>作为最终结果。

    PS。为了在每个映射器中准确处理输入文件的N行,可以使用NLineInputFormat

    09-15 14:11