package hadoop; /** * @ClassName HadoopUtils * @Description Hadoop中的Partitioner类的讲解说明 * @Author Administrator * @Date 2019/7/10 10:36 * @Version 1.0 **/ public class HadoopUtils { /** * 计算当前月份+星期得到的索引应该分配到哪个reducers节点上 * @param month 月份 * @param dayOfWeek 一周中的哪天 * @param indexRange 索引的范围 * @param noOfReducers reducers的数量 */ public static int getPartition(int month, int dayOfWeek, int indexRange, int noOfReducers) { int indicesPerReducer = (int) Math.floor(indexRange / noOfReducers);//Math.floor(11.5)=11 int index = (month - 1) * 7 + (7 - dayOfWeek); /** * 索引的范围小于reducers的数量 */ if (indexRange < noOfReducers) { return index; } /** * 计算当前月份+星期得到的索引应该分配到哪个reducers节点上 */ for (int i = 0; i < noOfReducers; i++) { int minValForPartitionInclusive = (i) * indicesPerReducer; int maxValForPartitionExclusive = (i + 1) * indicesPerReducer; if (index >= minValForPartitionInclusive && index < maxValForPartitionExclusive) { return i; } } } }