热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MapReduce代码以查找某些城市车站的平均温度

我使用hadoop3.1.2迈出了第一步,我拥有像这样的数据集:idstation;city;temp

我使用hadoop 3.1.2迈出了第一步,我拥有像这样的数据集:

id station; city; temperature
1; New York; 14
3; New York; 20
2; Bristol; 29
8; Rome; -10
30; Bristol; 2
10; Rome; 0
1; New York; 10
8; Rome; 10

通过Hadoop,使用mapreduce,我应该得到:ID站的分组以及平均温度。
但是,我对所有城市都不感兴趣,例如,仅对站号为1、8的城市不感兴趣。

场景:计算城市的总/平均温度
地图(键,值)->键:ID站,名称为city,值:温度。
减少:按ID站+名称城市分组,并获取每个站的平均温度。

得到类似的东西

City - Station; Average Temperature
New York - 1; 7
Rome - 8; 0

代码如下:

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import java.io.IOException;
public class SingleMapperReducer
{
public static void main(String[] args) throws Exception {
Configuration cOnf= new Configuration();
Job job = new Job(conf,"City Temperature Job");
job.setMapperClass(TemperatureMapper.class);
job.setReducerClass(TemperatureReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputvalueClass(IntWritable.class);
FileInputFormat.addInputPath(job,new Path(args[0]));
FileOutputFormat.setOutputPath(job,new Path(args[1]));
system.exit(job.waitForCompletion(true) ? 0 : 1);
}
/*
Id,City,Temperature
1; New York; 14
3; New York; 20
2; Bristol; 29
1; Rome; 20
2; Rome; -10
2; Bristol; 2
3; New YOrk; 10
1; Rome; 10
*/
private static class TemperatureMapper
extends Mapper {
public void map(Object key,Text value,Context context)
throws IOException,InterruptedException {
String txt = value.toString();
String[] tokens = txt.split(";");
String id = tokens[0].trim();
String temperature = tokens[2].trim();
if(id.equals("1"))
{
id="New York - 1";
}
else if(cat.equals("8"))
{
id="Rome - 8";
}
if (temperature.compareTo("Temperature") != 0)
context.write(new Text(id),new IntWritable(Integer.parseInt(temperature)));
}
}
private static class TemperatureReducer //on id city
extends Reducer {
private IntWritable result = new IntWritable();
public void reduce(Text key,Iterable values,Context context) throws IOException,InterruptedException {
int sum = 0;
int n = 0;
for (IntWritable val : values) {
sum += val.get();
n +=1;
}
result.set(sum/n);
context.write(key,result);
}
}
}

您认为它会起作用吗?
我在ID站上开发过滤器的代码部分,是否正确?
还有其他方法可以应用此过滤器吗?

感谢那些想帮助我的人!

更新26/11

@ cricket_007 @ amey-shirke

谢谢!我试图执行代码,进行建议的更改:

if (id.equals ("1") || id.equals ("8")) {
    id = id + "-" + tokens [1];
    context.write (new Text (id),new IntWritable (Integer.parseInt (temperature)));
}

更多这些

  Configuration cOnf= new Configuration ();
  Job job = Job.getInstance (conf,"word count");
job.setJarByClass(SingleMapperReducer.class);

-

系统执行了该过程,但是给了我一个空的输出文件。

p.s我在一个简单的“ wordcount”情况下尝试了hadoop的mapreduce框架,它可以工作。

可能会发生什么?



需要注意的几点:


  1. 如果仅关注ID 1和8,只需context.write()即可。符合

(temperature.compareTo("Temperature") != 0)


  1. 这段代码没有帮助,不需要BASE64



推荐阅读
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • 本文介绍了在MFC下利用C++和MFC的特性动态创建窗口的方法,包括继承现有的MFC类并加以改造、插入工具栏和状态栏对象的声明等。同时还提到了窗口销毁的处理方法。本文详细介绍了实现方法并给出了相关注意事项。 ... [详细]
  • 大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记
    本文介绍了大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记,包括outputFormat接口实现类、自定义outputFormat步骤和案例。案例中将包含nty的日志输出到nty.log文件,其他日志输出到other.log文件。同时提供了一些相关网址供参考。 ... [详细]
  • Hadoop2.6.0 + 云centos +伪分布式只谈部署
    3.0.3玩不好,现将2.6.0tar.gz上传到usr,chmod-Rhadoop:hadophadoop-2.6.0,rm掉3.0.32.在etcp ... [详细]
  • 对于开源的东东,尤其是刚出来不久,我认为最好的学习方式就是能够看源代码和doc,測试它的样例为了方便查看源代码,关联导入源代 ... [详细]
  • MR程序的几种提交运行模式本地模型运行1在windows的eclipse里面直接运行main方法,就会将job提交给本地执行器localjobrunner执行-- ... [详细]
  • 一维和二维数组的前缀和与差分 ... [详细]
  • MapReduce工作流程最详细解释
    MapReduce是我们再进行离线大数据处理的时候经常要使用的计算模型,MapReduce的计算过程被封装的很好,我们只用使用Map和Reduce函数,所以对其整体的计算过程不是太 ... [详细]
author-avatar
李林1108_965
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有