使用hadoop计算直方图
computing histogram using hadoop
我有一个整数 csv 文件,它对图像的 (r,g,b,a) 值进行编码,我想为 r、g、b 和 a 中的每一个计算 4 个直方图。我可以在 Hadoop 中编写一个 map reduce 作业来完成这项工作吗?
例如给定的输入文件:
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)。
在 reducer 中创建长度为 255 的数组(每个通道一个)并用零初始化。
对于每个输入,将与幅度相关的单元格递增一(在适当的数组中)
在输出中写入每个数组的值。在reducer的cleanup方法中
如果您使用 4 个 reducer 并创建一个分区器将每个通道发送到不同的 reducer,那么在每个 reducer 中您只需要创建一个数组,并且在输出中您将在不同的文件中获得每个直方图。而不是使用通道的字母,您可以将它们编码为 1,2,3,4 并使用 select reducer 的键。或者只使用一个减速器,你需要生成四个数组或一个 4 X 255 矩阵,并将 4 个直方图写入唯一文件。
我有一个整数 csv 文件,它对图像的 (r,g,b,a) 值进行编码,我想为 r、g、b 和 a 中的每一个计算 4 个直方图。我可以在 Hadoop 中编写一个 map reduce 作业来完成这项工作吗?
例如给定的输入文件:
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)。
在 reducer 中创建长度为 255 的数组(每个通道一个)并用零初始化。
对于每个输入,将与幅度相关的单元格递增一(在适当的数组中)
在输出中写入每个数组的值。在reducer的cleanup方法中
如果您使用 4 个 reducer 并创建一个分区器将每个通道发送到不同的 reducer,那么在每个 reducer 中您只需要创建一个数组,并且在输出中您将在不同的文件中获得每个直方图。而不是使用通道的字母,您可以将它们编码为 1,2,3,4 并使用 select reducer 的键。或者只使用一个减速器,你需要生成四个数组或一个 4 X 255 矩阵,并将 4 个直方图写入唯一文件。