Hadoop自带的数据类型

Intwritable,LongWritable,Text,xxWritable.

某些情况下:使用自定义的数据类型方便一些(类似java中的pojo)。

实现:

实现writableComparable接口即可。

场景例如:

成绩表:由语文,数学,英文组成。

上传到hdfs上score目录下一个score.txt文件--文件内容如下:

想让按照总成绩进行排名。如果成绩相同,则按照语文,数学,英文来排序。

一、自定义ScoreWritable实现writableComparable接口:

package com.day07;import org.apache.hadoop.io.WritableComparable;import java.io.*;
public class ScoreWritable implements WritableComparable<ScoreWritable> {int chinese;int math;int english;int sum;public ScoreWritable() {}public ScoreWritable(int chinese, int math, int english) {this.chinese = chinese;this.math = math;this.english = english;this.sum=chinese+english+math;}@Overridepublic String toString() {return "ScoreWritable{" +"chinese=" + chinese +", math=" + math +", english=" + english +", sum=" + sum +'}';}public int getChinese() {return chinese;}public void setChinese(int chinese) {this.chinese = chinese;}public int getMath() {return math;}public void setMath(int math) {this.math = math;}public int getEnglish() {return english;}public void setEnglish(int english) {this.english = english;}public int getSum() {return sum;}public void setSum(int sum) {this.sum = sum;}//比较public int compareTo(ScoreWritable that) {//先比较总成绩if (this.sum>that.getSum()){return -1;}else if(this.sum<that.getSum()){return 1;}else{if (this.chinese>that.getChinese()){return -1;}else if (this.chinese<that.getChinese()){return 1;}else {return -(this.math-that.getMath());}}}//序列化--dataOutput(data流):可以自定义序列化对象,节省空间,hadoop用的就是这个流public void write(DataOutput out) throws IOException {out.writeInt(chinese);out.writeInt(math);out.writeInt(english);out.writeInt(sum);}//反序列化public void readFields(DataInput in) throws IOException {this.chinese = in.readInt();this.math = in.readInt();this.english = in.readInt();this.sum = in.readInt();}
}

注意:

最好实现toString方法。

二、编写ScoreJob类用于测试自定义的ScoreWritable

package com.day07;import com.day03.MaxSaleJob;
import com.google.common.io.Resources;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import java.io.IOException;public class ScoreJob {public static class ScoreMapper extends Mapper<LongWritable,Text,ScoreWritable,NullWritable>{@Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {//super.map(key, value, context);String[] grades = value.toString().split(",");ScoreWritable score = new ScoreWritable(Integer.parseInt(grades[0]), Integer.parseInt(grades[1]), Integer.parseInt(grades[2]));context.write(score,NullWritable.get());}}public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {Configuration coreSiteConf = new Configuration();coreSiteConf.addResource(Resources.getResource("core-site-local.xml"));//设置一个任务Job job = Job.getInstance(coreSiteConf, "score");//设置job的运行类job.setJarByClass(ScoreJob.class);//mrdemo/target/mrdemo-1.0-SNAPSHOT.jar//job.setJar("mrdemo/target/mrdemo-1.0-SNAPSHOT.jar");//设置Map和Reduce处理类job.setMapperClass(ScoreMapper.class);//map输出类型job.setMapOutputKeyClass(ScoreWritable.class);job.setMapOutputValueClass(NullWritable.class);//设置job/reduce输出类型/*job.setOutputKeyClass(Text.class);job.setOutputValueClass(NullWritable.class);*///设置任务的输入路径FileInputFormat.addInputPath(job, new Path("/score/"));FileSystem fileSystem = FileSystem.get(coreSiteConf);if(fileSystem.exists(new Path("/out/"))){fileSystem.delete(new Path("/out/"),true);};FileOutputFormat.setOutputPath(job, new Path("/out/"));//运行任务boolean flag = job.waitForCompletion(true);if(flag){FSDataInputStream open = fileSystem.open(new Path("/out/part-r-00000"));byte[] buffer = new byte[1024];IOUtils.readFully(open,buffer,0,open.available());System.out.println(new String(buffer));}}
}

三、测试结果,类似于一下内容

转载于:https://www.cnblogs.com/pigdata/p/10305597.html

Mapreduce自定义数据类型相关推荐

  1. Hadoop读书笔记(六)MapReduce自定义数据类型demo

    Hadoop读书笔记(一)Hadoop介绍:http://blog.csdn.net/caicongyang/article/details/39898629 Hadoop读书笔记(二)HDFS的sh ...

  2. MapReduce编程实践之自定义数据类型

    一:任务描述 自定义数据类型完成手机流量的分析 二:example data 格式为:记录报告时间戳.手机号码.AP mac.AC mac.访问的网址.网址种类.上行数据包数.下行数据包数.上行总流量 ...

  3. TVM自定义数据类型

    TVM自定义数据类型 本文将介绍"自定义数据类型"框架,该框架可在TVM中使用自定义数据类型. 介绍 在设计加速器时,关键是如何近似地表示硬件中的实数.这个问题具有长期的行业标准解 ...

  4. 自主数据类型:在TVM中启用自定义数据类型探索

    自主数据类型:在TVM中启用自定义数据类型探索 介绍 在设计加速器时,一个重要的决定是如何在硬件中近似地表示实数.这个问题有一个长期的行业标准解决方案:IEEE 754浮点标准.1.然而,当试图通过构 ...

  5. hadoop map reduce自定义数据类型时注意顺序,否则报错。

    2019独角兽企业重金招聘Python工程师标准>>> 自定义数据类型,实现Writable接口,重写write方法和readFields方法时,在操作字段时,必须保证顺序,如果在w ...

  6. Qt信号与槽传递自定义数据类型——两种解决方法

    Qt信号与槽传递自定义数据类型--两种解决方法 参考文章: (1)Qt信号与槽传递自定义数据类型--两种解决方法 (2)https://www.cnblogs.com/tid-think/p/9300 ...

  7. 【剑仙教程】易语言的结构体。自定义数据类型。

    1楼. [剑仙教程]易语言的结构体.自定义数据类型. 在易语言中,有基本数据类型,自定义数据类型. 自定义数据类型,在C语言/C++中称为结构体.这是面向对象和类的编程. . . 先上代码.打开易语言 ...

  8. Oracle自定义数据类型 1

    原文 oracle 自定义类型 type / create type 一 Oracle中的类型 类型有很多种,主要可以分为以下几类: 1.字符串类型.如:char.nchar.varchar2.nva ...

  9. 玩转C语言之自定义数据类型-typedef

    玩转C语言之自定义数据类型-typedef 1 引言 引言:在C语言中没有提供字节类型,如果在工程中需要使用表示字节的变量时,该怎么办呢? 我们知道 1 个字节占用 8 个二进制位空间,解决这个问题的 ...

最新文章

  1. 转:.Net 中的反射(反射特性) - Part.3
  2. 【一天一道兼容性】之——IOS4及以下fixed失效
  3. access开发精要(7)-定位记录、查找空值
  4. Oracle任务调度的高级选项
  5. 计算机系统化科学化和什么,自动化概论复习资料
  6. Webpack —— tree-starking 解析
  7. sp烘焙流程_次世代86机甲战神制作全流程
  8. c++水平制表符怎么用_怎么才能把字写得好看一些?这四个方法用对了,水平会提升...
  9. 创建和管理CVSNT服务器的步骤
  10. python调用sklearn库BP神经网络基于小样本进行痘痘预测尝试
  11. RSA私钥及公钥生成
  12. python反编译安卓_APK反编译得工具总结(转载)
  13. Vue中数组的响应式操作
  14. 一米霜降肥牛,煎饼果子,all you can eat 牛油串串
  15. SpringBoot Mybatis 读写分离配置(山东数漫江湖)
  16. Django企业开发实战--by胡阳,学习记录1127
  17. Charles抓包工具测试实战
  18. 深蓝学院SLAM理论与实践课程
  19. 移动端APP客户旅程图免费下载,提升用户体验感
  20. 无法启动计算机打印机服务程序,安装驱动程序时电脑弹出错误窗口“无法启动Windows打印后台程序服务” (适用于Windows OS)...

热门文章

  1. Kubernetes 1.2新功能解析:使用Deployment
  2. ubuntu下svn使用指南
  3. DataContractJsonSerializer类
  4. Check Dependency 2(一个检查.net部署文件完整性及一致性工具)
  5. 今天开始复习toefl,mark一下
  6. CCNA试验-1标准acl
  7. Ubuntu Server搭建FTP服务器(2) --本地用户FTP服务器架设
  8. ultraiso制作xubuntu启动盘
  9. ValueError: Related model 'users.UserProfile' cannot be resolved
  10. On branch master nothing to commit, working tree clean