MapReduce编程: 3. 航班数据按月份升序,星期降序排列

Hadoop MapReduce程序分析飞机航班信息源代码 1: 数据来源: 基于美国民航航班1987年数据,开发MapReduce应用程序计算其中某一年各个航班的飞行数据。 数据式样 Year,Month,DayofMonth,DayOfWeek,DepTime,CRSDepTime,ArrTime,CRSArrTime,UniqueCarrier,FlightNum,TailNum,ActualElapsedTime,CRSElap 阅读详情

MapReduce编程:3. 航班数据按月份升序,星期降序排列

题目
  • 航空公司数据按月份升序,同时按星期降序排列
  • 任意数量的Reducer
  • 输出文件全排序:Part-0000,Part-0001,…按文件名依次接将得到一个完整的结果排序
  • 输入一下字段逗号隔开:月份,星期几,起飞机场,目的机场
分析
  1. 题目要求只要实现排序,所以不存在计算的问题,但是要使用两个字段来排序,所以需要自己定义数据类型,来作为map输出的键,而后的起飞机场和目的机场也是需要自己定义数据类型的,所以首先需要了解Writable接口和WritableComparable接口
  2. 在 https://blog.youkuaiyun.com/Dongroot/article/details/88571680 这篇博客中,我输出了一次中间的处理结果,可以看到,hadoop对自带的类是有默认排序的,所以对于自定义的类,hadoop肯定无法默认排序了,所以需要自己定义排序规则
  3. 在自定义的数据类型可以进行排序之后,hadoop会根据排序规则去进行排序,这时map和reduce不在需要做别的处理,只需要在map将数据分成键值对,在reduce将结果输出,但是我们要使用多reduce对排序进行并行处理,所以还需要了解Partitioner类
Writable接口和WritableComparable接口
  1. 在hadoop中,集群环境下,处理数据是在不同的计算机,机器间的数据流通必须要通过网络,所以hadoop提供了Writable接口,来实现数据的序列化与反序列化,这个原理我知道,但是说不清楚,就和做javaweb开发的时候,Javabean要实现Serializable接口一样的道理。所以只要记住,要自己定义数据类型,必须要实现Writable接口
  2. 同时,MapReduce的输入输出都是键值对形式的,在shuffle阶段,会对键值对根据键的数据类型,进行排序,所以作为键的类,还必须要实现Comparable接口,来定义排序规则
  3. 所以hadoop提供了WritableComparable接口,实现这个接口,相当于同时实现了Writable和Comparable接口
  4. Writable接口有两个方法,readFields(DataInput in)和write(DataOutput out),前者是从输入流中抓取数据,重新创建Writable实例,DataInput中的方法可以反序列化java的基本类型;后者是将实例写入到输出流中,DataOutput中的方法可以序列化java的基本类型
  5. WritableComparable接口多了一个CompareTo(Object o)方法,作用就是定义排序规则,将调用者与参数进行对比,返回值为int型,大于返回大于零的数,等于返回0,小于返回小于零的数
  6. 还看不懂的话,就没办法了,推荐个博客

https://blog.youkuaiyun.com/chengyuqiang/article/details/78634755

Partitioner类
  1. 在前面的两个博客中,我都只使用了一个reduce进行操作,很显然没有发挥出MapReduce的全部实力,所以这次我们使用多个reduce进行并行处理,那么问题来了,每个reduce会产生一个输出文件,那么hadoop是如何知道map的结果应该发往哪个reduce进行处理,这就需要指定分区
  2. hadoop自带了几个Partitioner,在不指定的情况下,hadoop默认使用HashPartitioner,根据哈希算法计算分区,还有一种是TotalOrderPartitioner,分区中的数据范围需要通过分区文件来确认
  3. 对于TotalOrderPartitioner,分区文件可以自己手动创建,进行等距划分,但是如果数据本身是分布不均匀的,会导致有些reduce工作量大,有些工作量小,所以还可以进行数据抽样,然后根据抽样结果的数据分布,创建分区文件
  4. 除了这两种Partitioner,还可以自己定义,只要继承Partitioner类,实现ge
Dify工作流实战:5分钟搞定金融新闻自动抓取与邮件发送(附DSL文件) 本文详细介绍了如何使用Dify工作流快速搭建金融新闻自动抓取与邮件发送系统。通过配置HTTP请求节点、LLM处理节点和邮件发送节点,结合提供的DSL文件,实现新闻的定时抓取、内容筛选和自动发送,大幅提升金融信息监控效率。 阅读详情

相关推荐

mapreduce,自定义排序,分区,分组实现按照年份升序排序,温度降序排序

自定义类: package myhadoop; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; import org.apache.hadoop.io.WritableComparable; public class KeyClass implements WritableCo

小魏的博客 2394

MapReduce做key降序排序

由于mapreduce能对key进行排序,所以我们想要的数据可以利用这一点进行排序。 完整代码 package com.招聘; import org.apache.commons.io.FileUtils; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apach...

jws123123123的博客 1063

Unity通过Vosk实现离线语音识别方法

以下是一个使用 Unity 和 Vosk(一个开源的离线语音识别库)的简单示例。将Vosk的DLL文件(如libvosk.dll、vosk.dll等)放入Assets/Plugins文件夹中。通过以上步骤,你可以在Unity中实现一个简单的离线语音识别功能。音频格式:确保录音的音频格式与Vosk模型要求的格式一致(通常是16kHz、16bit单声道)。首先,你需要下载Vosk的语音识别模型。在Assets文件夹中创建一个Plugins文件夹,用于存放Vosk的DLL文件。打开Unity并创建一个新的项目。

qq_39515892的博客 2068

STM32CubeMX + HAL库避坑指南:为什么你的代码总在SystemClock_Config卡住?

本文深入剖析了STM32开发者在使用STM32CubeMX和HAL库时,代码在SystemClock_Config函数中卡死的根本原因。文章不仅指出硬件时序、Flash延迟配置等常见陷阱,更提供了从硬件设计、软件容错到深度调试的系统性解决方案,帮助开发者构建鲁棒的时钟初始化策略,彻底告别启动卡顿问题。

bb456的博客 927

cadence——MOS晶体管I-V特性曲线仿真

MOS晶体管I-V特性曲线仿真 目标:使用cadence绘制晶体管的I-V特性曲线(dc仿真) 流程: 新建原理图,将MOS管的栅极电压设为变量Vg,漏极电压设为变量Vd 打开ADEL,点击Variables——Copy From Cellview添加变量;并选择dc仿真,对Vd进行扫描 以Vg作为参变量进行仿真,点击Tools——Parametric Analysis进行设置 选择漏极电流作为输出,进行仿真即可得到I-V特性曲线 ...

skycmq的博客 1万+

ArcMap学习笔记(三)地图数字化

地图数字化前言地图数字化实现步骤1.加载地形图2.新建要素图层3.开启编辑环境4.设置捕捉环境5.选择数字化图层6.数字化控制点7.数字化等高线8.数字化图幅边框9.保存数字化成果总结 前言 使用软件:ArcMap10.4.1中文版 如果出现侵权,请在评论留言,我会及时删除,谢谢。 地图数字化 空间数据采集(输入)是将现有的地图、外业观测成果、航空像片、遥感图片数据、文本资料等转换成GIS可以直接...

JayWang博客 1万+

晶圆测试(Wafer Sort)的核心技术与良率提升策略

晶圆测试(Wafer Sort)是芯片制造中的关键“入学考试”,通过探针台与自动测试设备(ATE)对晶圆上的芯片进行功能与参数测试,筛选不合格芯片以控制成本。本文深入解析了其核心技术,包括自动化视觉系统对准、测试流程优化策略,并探讨如何利用测试数据驱动良率提升,展望了DFT与AI智能测试的未来趋势。

e4f5g6h的博客 514

SAP-MM-供应商对账平台(功能集合)

(1)集成OA审批,线上核销,结果写入SAP; (2)集成SRM,线上与供应商对账确认,写入SAP; (3)集成财务付款结果确认写入,OA回传结果,定时同步SRM供应商平台。 欢迎留言交流,功能完善,如需要页面设计,请订阅专栏

qq_32198063的博客 748

【Flutter 问题系列第 85 篇】Xcode 运行 Flutter 提示 The Dart VM Service was not discovered after 60 seconds.

在 Xcode 上运行 Flutter 时提示 `The Dart VM Service was not discovered after 60 seconds. This is taking much longer than expected...`,意思是 `60秒后未发现Dart虚拟机服务。这比预期的要长得多`

“Allen Su”的博客 2235

超硬核实操!DeepSeek 全方位赋能嵌入式工程师,干货满满

摘要:本文聚焦 DeepSeek 大语言模型在嵌入式开发中的实操应用。开篇阐述其在开发前期助工程师精准理解需求、规划架构;代码编写阶段,可生成补全代码、助力算法实现与优化;调试测试时,能定位问题、生成测试用例;学习阶段,帮整理资料、规划学习路径。文中借助 Python 实现与模型交互,提供大量实操流程与代码示例。虽存在不足,但实操彰显其巨大潜力,为嵌入式工程师提供高效工作新思路与全面实操指南。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 2001

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

上一篇: MapReduce编程: 2. 矩阵乘法
下一篇: 代理模式
ye_xiao_dong
博客等级 码龄9年 28粉丝 16原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值