如何使用mapreduce转置5x5矩阵

如何使用mapreduce转置5x5矩阵,mapreduce,Mapreduce,我曾经尝试过,mapper将矩阵划分为2x2,并将其交给reducer。减速机对每个2x2矩阵执行转置。但是,当将奇数阶矩阵划分为2x2时,将1x1矩阵保留在末尾。因此,如何编写映射和约简函数来克服这个问题。请给我发送一个解决方案。假设矩阵以csv分隔,列以csv分隔,行以新行分隔。您可以在地图任务中逐行阅读 对于每一行,根据逗号进行拆分,并为每一列获取标记。 现在,您需要一个用于reducer的自定义值对象(从writeable继承),该对象将在特定列中存储行号和值 映射任务将以列编号的形式发

我曾经尝试过,mapper将矩阵划分为
2x2
,并将其交给reducer。减速机对每个
2x2
矩阵执行转置。但是,当将奇数阶矩阵划分为
2x2
时,将
1x1
矩阵保留在末尾。因此,如何编写映射和约简函数来克服这个问题。请给我发送一个解决方案。

假设矩阵以csv分隔,列以csv分隔,行以新行分隔。您可以在地图任务中逐行阅读 对于每一行,根据逗号进行拆分,并为每一列获取标记。 现在,您需要一个用于reducer的自定义值对象(从writeable继承),该对象将在特定列中存储行号和值

映射任务将以列编号的形式发出键,在该列编号处读取列值,值将是上面定义的自定义值对象

您将需要一个二级排序/比较器,它将根据自定义值对象的行_编号字段进行排序,以便在结束时迭代值时可以保持顺序


在reducer中,只需读取根据行号排序的键,获取每个键的迭代器,创建csv字符串并写入输出文件。

如果没有MapReduce,这似乎是一个很容易解决的问题。有什么特别的原因让你想把它强加到MR中吗?是的,我想知道使用MapReduce是否可以降低时间复杂度。我不知道有哪个应用程序MapReduce可以降低计算复杂度。MR的优点是,您可以使用多个处理器处理太大而无法放在单个磁盘上的文件。对于小事情(如5x5矩阵),MR几乎肯定会扼杀您的性能。