用hadoop计算直方图

用hadoop计算直方图,hadoop,mapreduce,histogram,Hadoop,Mapreduce,Histogram,我有一个csv整数文件,对图像的(r,g,b,a)值进行编码,我想为r,g,b和a中的每一个计算4个直方图。我可以在Hadoop中编写一个MapReduce作业来实现这一点吗 例如,给定的输入文件: 1,2,3,4,1,2,3,4 我希望直方图输出为: r[1] = 2 r[i] = 0 for all other i's g[2] = 2 g[i] = 0 for all other i's b[3] = 2 b[i] = 0 for all other i's a[4] = 2

我有一个csv整数文件,对图像的(r,g,b,a)值进行编码,我想为r,g,b和a中的每一个计算4个直方图。我可以在Hadoop中编写一个MapReduce作业来实现这一点吗

例如,给定的输入文件:

1,2,3,4,1,2,3,4
我希望直方图输出为:

r[1] = 2   r[i] = 0 for all other i's
g[2] = 2   g[i] = 0 for all other i's
b[3] = 2   b[i] = 0 for all other i's
a[4] = 2   a[i] = 0 for all other i's
实际输出文件是另一个csv文件,其外观如下:

0, 2, (253 0's for red), 0, 0, 2, (252 0's for green), 0, 0, 2, (251 0's   for blue), 0, 0, 0, 0, 2, (250 0's for alpha)
当然可以

  • 在映射程序中,首先解析输入以识别通道

  • 使用通道作为键(r、g、b、a),并将幅值作为值。在你的例子中:(r,1),(g,2)。。。(a,4)

  • 在还原器中,创建长度为255(每个通道一个)的数组,并用零初始化

  • 对于每个输入,在一个(适当数组中)中增加与幅值相关的单元格

  • 在输出中写入每个数组的值。在减速器的清理方法中


  • 如果您使用4个减速机并创建一个分区器,将每个通道发送到不同的减速机,那么在每个减速机中,您只需要创建一个数组,在输出中,您将在不同的文件中获得每个直方图。相反,要使用通道的字母,可以将其编码为1、2、3、4,并使用键选择减速器。或者只使用一个减速机,您需要生成四个数组或一个4 X 255矩阵,并在一个文件中写入四个直方图。

    您能用所提供输入的精确(可能)输出值重写您的示例吗?