自定义OutputFormat的使用方法_自定义fileoutputformat-程序员宅基地

技术标签: hadoop  

自定义OutputFormat使用

为了实现控制最终文件的输出路径和输出格式,可以自定义OutputFormat.

自定义OutFomat步骤
1)A定义类继承FileOutputFormat,返回B自定义类
2)B自定义类继承RecordWriter类,重写write()方法实现业务逻辑。

先继承FileOutFormat,返回FRecordWriter

public class FileterOutputFormat extends FileOutputFormat<Text, NullWritable>{
    	
	@Override
	public RecordWriter<Text, NullWritable> getRecordWriter(TaskAttemptContext job)
	throws IOException, InterruptedException {
    
		return new FRecordWriter(job);
	}
}

FRecordWriter继承RecordWriter类,在write()方法中实现具体业务逻辑

public class FRecordWriter extends RecordWriter<Text, NullWritable> {
    
	FSDataOutputStream fosatguigu;
	FSDataOutputStream fosother;
	public FRecordWriter(TaskAttemptContext job) {
    	
	try{
    	
			//1.获取文件系统
			FileSystem fs = FileSystem.get(job.getConfiguration());
			//2.创建输出到atgugui路径的输出流
			fosatguigu = fs.create(new Path("e:/atguigu.log"));
			//3.创建输出到other路径的输出流
			fosother = fs.create(new Path("e:/other.log"));
}catch(IOException e){
    
 	e.printStackTrace();
}
}

//关闭流
@Override
public void close(TaskAttemptContext context) throws Exception{
    
	IOUtils.closeStream(fosatguigu);
	IOUtils.closeStream(fosother);
}

//业务逻辑
public void write(Text key, NullWritable value) throws IOException, InterruptedException {
    
	if(key.toString.contains("atguigu")){
    
		fosatguigu.write(key.toString().getBytes());
	}else {
    
		fosother.write(key.toString().getBytes());
	}
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44122269/article/details/106442202

智能推荐

android 动态加载 view,Android_Android动态添加View的问题解决方法,后台代码复制代码 代码如下:&n - phpStudy...-程序员宅基地

文章浏览阅读97次。Android动态添加View的问题解决方法后台代码private void ChangeView(){ly.removeAllViews();LayoutInflater inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);View layout = inflater.inflate(R.layout.grid..._android addview 源码

一步一步学习OCS2007(一)--如何定制在线状态?-程序员宅基地

文章浏览阅读48次。  OCS 2007(即Microsoft Office Communicators Server 2007) 是微软2007年推出的一款非常重要的即时通讯软件,她汇集了多方即时通讯、多方语音聊天、多方视频会议等众多功能,同时还提供了强大的二次开发接口,以便用户进一步去扩展、去开拓。  下面,我将逐惭就OCS2007二次开发过程中的一些体会,感受表达出来,与读者共享。  今天的主题是,用户..._ocs flow过站状态

Linux底层IIC 总线的理解、调用函数以及常见面试问题_linux iic 只有一次起始信号-程序员宅基地

文章浏览阅读830次。对 IIC 总线的理解、调用函数以及常见面试问题一、IIC 总线概述:IIC 即Inter-Integrated Circuit(集成电路总线)I2C总线是PHLIPS公司推出的一种串行总线, I2C总线只有两根双向信号线。一根是数据线SDA,另一根是时钟线SCL。 每个接到I..._linux iic 只有一次起始信号

三层架构之间的相互关系_三层架构的引用关系-程序员宅基地

文章浏览阅读4.6k次。一般讲到三层架构,其实就是将整个业务应用划分为表示层、业务逻辑层、数据访问层等。 数据访问层DAL,业务逻辑层BLL。表现层UI (界面类的)【 model(数据模型层,主要放的我就不用说了。一般都是数据库中的。) ,】model是贯穿的。所有的都引用它,bll引用dal ui引用dal 和bll 然后就是调用 三层体系结构,是在客户端与数据库之间加入了一个“中间层”,也叫组件层。这里所说的三_三层架构的引用关系

微信小程序页面跳转(三种方法)_微信小程序登录页面跳转-程序员宅基地

文章浏览阅读4.5k次。【代码】微信小程序页面跳转(三种方法)_微信小程序登录页面跳转

java中如何给JList设置大小,Java JList用法-程序员宅基地

文章浏览阅读602次。本文概述JList类的对象表示文本项的列表。可以设置文本项列表, 以便用户可以选择一项或多项。它继承了JComponent类。JList类声明我们来看一下javax.swing.JList类的声明。public class JList extends JComponent implements Scrollable, Accessible常用的构造函数:建设者描述JList()创建一个具有空只读模..._java 中jlist怎么设置大小

随便推点

Linux系统调用的“三层皮”:API,中断服务程序,内核服务程序_linux中的api层级是什么-程序员宅基地

文章浏览阅读982次。黄志恒 原创作品欢迎转载请注明出处 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ”一、用户态与内核态 在了解系统调用之前,必须先明白Linux系统的用户态和内核态这两个概念。 用户态:对应低级别执行状态,代码的掌控范围会受到限制,只能对应级别允许的范围活动。 内核态:高执行级别,代码_linux中的api层级是什么

pycharm中导入allure提示模块不存在解决方法_pycharm虚拟环境 allure serve ./allure-result报找不到allure-程序员宅基地

文章浏览阅读1w次,点赞4次,收藏4次。已经使用pip安装allure,但在pycharm中导入allure模块,提示allure模块不存在,如图:解决方法:pycharm中点击【Preference】--》【Project Interpreter】,然后点击左下角的【+】按钮,如图 输入“allure”进行搜索,然后选择“allure-pytest”,点击左下角的【Install Package】,如图 安装成功,如图..._pycharm虚拟环境 allure serve ./allure-result报找不到allure

LAMP环境 源码编译安装(Apache 2.4.52 +mysql 8.0.28+php 8.1.3)_lamp环境安装源码包-程序员宅基地

文章浏览阅读1.9k次。一、升级软件及Centos 内核1、yum clean all2、yum update -y#升级系统及内核3、cat /etc/redhat-release #升级后查看版本4、yum install lrzsz vim wget dnf -y #安装系统常用工具包二、安装LAMP 环境依赖包2.1yum groupinstall "Development tools" -yyum install pcre-devel expat-de..._lamp环境安装源码包

我的 Mac 终端配置(Mac OSX + iTerm2 + Zsh + Oh-My-Zsh)_安装menlo regularforpowerline.otf和monacoforpowerline-程序员宅基地

文章浏览阅读4.3w次,点赞9次,收藏47次。相关工具介绍iTerm2:Mac 下 Terminal 终端的替代品,拥有更多强大的功能,想了解更多请戳 iTerm2 官网;zsh:Linux 的一种 shell 外壳,和 bash 属于同类产品;Oh-My-Zsh:用来管理 zsh 的配置,同时还有很多社区贡献的主题配置以及好用的插件可供使用,了解更多请戳 Oh-My-Zsh 官网 ;配置方案总览iTerm2 终端工具;..._安装menlo regularforpowerline.otf和monacoforpowerline.otf两个字体

【考试记录】阿里云DevOps助理工程师(ACA)_下面哪一项是按照用户故事格式进行述的?-程序员宅基地

文章浏览阅读875次。一:考试总结这个考试之前花了60块钱买的,后来因为一直在弄实习和硕士论文,所以就么有考试,趁着有时间了,抓紧考完,也好对得起这60块钱。这部分的主要内容其实和读本科的时候学习的软件测试、读硕士时候的项目管理的课差不多的。内容基本都是学过的东西,不过这些东西好多都是自动测试的,感觉还是挺高级的,还是值得深入研究的。二:真题1.云计算模型中, “平台即服务”是指下面哪一项?A. laas B. Paas C. Saas D. Faas解析:平台即服务一般指PaaS2.下面哪一项..._下面哪一项是按照用户故事格式进行述的?

机器人抓取中物体定位算法概述_机器人抓取定位算法-程序员宅基地

文章浏览阅读1w次,点赞21次,收藏130次。1. 引言机器人抓取的首要任务,是确定要抓什么,也就是需要定位目标物体在输入数据中的位置。这个过程可以分为三个层次,分别为物体定位但不识别、物体检测、物体实例分割。物体定位但不识别是指获得目标物体的2D/3D范围但是不知道物体的类别;目标检测是指得到目标物体的2D/3D包围盒,同时识别目标物体的类别;目标实例分割提供目标物体所占有的像素或者点级别的区域信息,同时识别目标物体的类别。本文来自论文h..._机器人抓取定位算法