Java MapReduce中的聚合
如何在.csv中找到列的最大和最小元素 我们应该向上下文传递什么。编写映射器的(键、值)Java MapReduce中的聚合,java,hadoop,mapreduce,Java,Hadoop,Mapreduce,如何在.csv中找到列的最大和最小元素 我们应该向上下文传递什么。编写映射器的(键、值) 是否是该csv文件的每一列 对于一个如此宽泛的问题来说,这有点宽泛,但我要咬一口 映射器用于将值映射到键。假设您的CSV有4列,其中包含数值: 42,71,45,22 将一个键映射到每个值;实际上,CSV中的标题是什么。假设第4列表示“小部件的数量”。您需要将“numberofwidgets”映射为映射器中第4列值的键 减速器将获取给定键的所有值。这就是您计算最小值/最大值的地方。您只需迭代关键点的所有值,
对于一个如此宽泛的问题来说,这有点宽泛,但我要咬一口 映射器用于将值映射到键。假设您的CSV有4列,其中包含数值: 42,71,45,22 将一个键映射到每个值;实际上,CSV中的标题是什么。假设第4列表示“小部件的数量”。您需要将“numberofwidgets”映射为映射器中第4列值的键
减速器将获取给定键的所有值。这就是您计算最小值/最大值的地方。您只需迭代关键点的所有值,并跟踪最小值和最大值。映射器应转置文件-对于读取的每一行,将关键点作为列号,将值作为列值
减速机应为每个输入键的最小值/最大值,发出找到的最小值和最大值。您不会这样做。Brian Roach感谢您的回答:那么mapper做什么呢?这将花费大量的数据进行传输和排序。我只会为每个任务发出一列的最小/最大值,然后在减缩器中发出剩余值的最小/最大值。如何发出输入的最小/最大值(一行)以获得最后一列的最小/最大值?您将列优化保存在哪里?@jtravaglini映射程序可以确定其子集的列最小值和最大值,并使用键columnname_min和columnname_max发出它们。可以在映射程序中预聚合,但这并不简单。如果没有自定义记录读取器,您不知道何时到达输入拆分的末尾(例如,映射器没有更多记录)。您必须在
cleanup()
中加入逻辑才能发出最小/最大值(在新的API中;在旧的API中,它更难看)如何将头从csv文件中分离出来