一、气象数据
按行并以 ASCII 格式存储,每一行是一条记录。下图展示了一行采样数据。
1998 #year
03 #month
09 #day
17 #hour
11 #temperature
-100 #dew
10237 #pressure
60 #wind_direction
72 #wind_speed
0 #sky_condition
0 #rain_1h
-9999 #rain_6h
将每个气象站的数据文件拼接成一个单独的文件更容易处理,预处理过的数据文件示例如下所示:
1985 07 31 02 200 94 10137 220 26 1 0 -9999
1985 07 31 03 172 94 10142 240 0 0 0 -9999
1985 07 31 04 156 83 10148 260 10 0 0 -9999
1985 07 31 05 133 78 -9999 250 0 -9999 0 -9999
1985 07 31 06 122 72 -9999 90 0 -9999 0 0
1985 07 31 07 117 67 -9999 60 0 -9999 0 -9999
1985 07 31 08 111 61 -9999 90 0 -9999 0 -9999
1985 07 31 09 111 61 -9999 60 5 -9999 0 -9999
1985 07 31 10 106 67 -9999 80 0 -9999 0 -9999
1985 07 31 11 100 56 -9999 50 5 -9999 0 -9999
二、数据导入hdfs
使用myeclipse链接集群hdfs,将数据导入hdfs系统的/home/hadoop/weather目录下(自行创建一个存放数据的目录)。
命令行访问
三、思路分析
1.map 阶段输入 原始数据。选择文本格式作为输入格式,将数据集的每一行作为文本输入。提取气象站和气温信息,并将它们作为输出。
2.reduce阶段接收map 函数的输出结果:每个气象站后面紧跟着一系列气温数据,使用reduce 函数遍历整个列表并统计出平均气温。
四、代码
1.编写 Mapper 类,实现 map() 方法,提取气象站和气温数据。
/*
* 定义一个Mapper类实现map()方法解析气象站数据
* input key=偏移量,input value =每行数据
* output key=weatherStationID, output value =temperature
*/
public class TempratureMapper