MapReduce学习问题记录

1、如何跳过对某行数据的处理

第一行数据是字段名不需要处理,我们知道第一行偏移量是0(行记录的时候是从数组首地址开始,到了行标识符进行一次计数,这个计数就是行偏移量,从0开始),我们根据偏移量值进行判断,然后用中断方法把第一行数据跳过。

java 复制代码
// 根据偏移量把第一行筛选出来:
        if (0== key.get()){
            return; // 中断方法:即不对符合条件的数据进行处理,也就是跳过这些数据不做处理
        }

2、接下来是对需求数据的Map处理

java 复制代码
String[] line = value.toString().replaceAll("\"","").split(",");
        //对可能数组越界的字符串数据过滤:用判断把长度不符合的数组剔除
        if (11== line.length){
            //对符合要求的数据开始写出:格式---K:省市年月日(拼接),V:温度
            StringBuilder outKey = new StringBuilder();
            outKey.append(line[1]).append(line[2])
                                  .append(DateTimeFormatter.ofPattern("yyyyMMdd")
                                  .format(LocalDateTime.parse(line[9], DateTimeFormatter.ofPattern("d/M/yyyy HH:mm:ss"))));
            context.write(new Text(outKey.toString()),new IntWritable(Integer.parseInt(line[5])));
        }

3、接下来是reduce处理逻辑

根据业务需求写出数据

java 复制代码
package com.yjxxt.Weather;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

import java.io.IOException;

/**
 * Reducer中四个泛型解释
 * KEYIN: MapTask写出数据的key:地区年月日
 * VALUEIN:MapTask写出数据的value  温度(N条,因为记录了每天不同时刻的温度)
 * KEYOUT: Reducetask写出数据的key 地区年月日
 * VALUEOUT: Reducetask写出数据的value 温度最值
 */
public class WeatherReducer extends Reducer <Text, IntWritable, Text, Text>{
    @Override
    protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
        //这里的VALUEOUT是要最高温和最低温,所以reduce要把拉取过来的温度进行比较(从map-->reduce:数据是1:N模型)
        int max=-100,min=100;
        //用比较函数找到最值
        for (IntWritable value:values
             ) {
            max = Math.max(max, value.get());
            min = Math.min(max, value.get());
        }
        //将最终结果写出去:VALUEOUT也写成文本形式
        context.write(key,new Text("最高温度["+max+"]最低温度["+min+"]"));
    }
}
相关推荐
bing.shao1 分钟前
让机器从数据中生成本领:诺因Knowin通用具身智能生成式学习架构GLOW深度解析
学习·架构
阳光九叶草LXGZXJ12 分钟前
达梦数据库-学习-69-DM9主备集群部署
linux·运维·服务器·数据库·sql·学习
Molesidy24 分钟前
【Embedded Development】【高级MCU篇】基于野火STM32H750XBH6_Pro开发板的高级MCU开发学习之1点亮led
stm32·单片机·学习
星恒随风35 分钟前
Linux开发工具详解(一):软件包管理、Vim、GCC/G++、Makefile与进度条实战
linux·运维·笔记·学习·vim
传奇开心果编程39 分钟前
【ArkUI进阶练中学】第10课:架构设计与工程化最佳实践
学习·ui·华为·harmonyos
在猴站学算法1 小时前
(SQL注入学习)联合查询注入(UNION-Based)
sql·学习·网络安全
欣欣之王来了1 小时前
5G的行业应用:工业互联网、车联网、智慧医疗中的网络支撑
网络·学习·计算机网络·安全·教程
dtq04241 小时前
数据结构 - 树的概念
c语言·数据结构·学习·算法
inferno2 小时前
SVN学习笔记(一)
笔记·学习·svn
传奇开心果编程2 小时前
【ArkUI提高练中学】第7课:性能调优与稳定性治理
学习·ui·华为·harmonyos