輸出數據OutputFormat案例

?輸出數據OutputFormat

案例:

www.atguigu.com  
www.atguigu.com  
www.atguigu.com  
www.hao123.com   
www.shouhu.com  
www.baidu.com  
www.atguigu.com  
www.qq.com  
www.gaga.com  
www.qinghua.com  
www.sogou.com  
www.baidu.com  
www.alibaba.com 

1.創建一個文件在log.txt

如下圖:

2.在java目錄下創建一個outputFormatTest文件夾

在文件夾下面創建相應的類

3.LogMapper的代碼如下:

package outputFormatTest;import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;import java.io.IOException;public class LogMapper extends Mapper<LongWritable, Text, Text, NullWritable> {@Overrideprotected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, NullWritable>.Context context) throws IOException, InterruptedException {context.write(value,NullWritable.get());}
}

4.LogReducer的代碼如下

package outputFormatTest;import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;import java.io.IOException;public class LogReducer extends Reducer<Text, NullWritable,Text,NullWritable> {@Overrideprotected void reduce(Text key, Iterable<NullWritable> values, Context context) throws IOException, InterruptedException {for (NullWritable value : values) {context.write(key,NullWritable.get());}}
}

5.LogOutputFormat代碼為

package outputFormatTest;import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.RecordWriter;
import org.apache.hadoop.mapreduce.TaskAttemptContext;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import java.io.IOException;public class LogOutputFormat extends FileOutputFormat<Text, NullWritable> {@Overridepublic RecordWriter<Text, NullWritable> getRecordWriter(TaskAttemptContext job) throws IOException, InterruptedException {LogRecordWriter logRecordWriter=new LogRecordWriter(job);return logRecordWriter;}
}

5.LogRecordWriter的代碼如下

package outputFormatTest;import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.RecordWriter;
import org.apache.hadoop.mapreduce.TaskAttemptContext;import java.io.IOException;public class LogRecordWriter extends RecordWriter<Text, NullWritable> {private FSDataOutputStream atguiguOut;private FSDataOutputStream otherOut;public LogRecordWriter(TaskAttemptContext job) {try {FileSystem fs=FileSystem.get(job.getConfiguration());atguiguOut=fs.create(new Path("/root/IdeaProjects/mapReduceTest/logOutputTest/log/atguigu.log"));otherOut=fs.create(new Path("/root/IdeaProjects/mapReduceTest/logOutputTest/log/other.log"));} catch (IOException e) {throw new RuntimeException(e);}}@Overridepublic void write(Text key, NullWritable value) throws IOException, InterruptedException {String log=key.toString();if(log.contains("atguigu")){atguiguOut.writeBytes(log+"\n");}else{otherOut.writeBytes(log+"\n");}}@Overridepublic void close(TaskAttemptContext taskAttemptContext) throws IOException, InterruptedException {IOUtils.closeStream(atguiguOut);IOUtils.closeStream(otherOut);}
}

6.LogDriver的代碼如下

package outputFormatTest;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import java.io.IOException;public class LogDriver {public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException {//1.Configuration configuration=new Configuration();Job job=Job.getInstance(configuration);//2.job.setJarByClass(LogDriver.class);//3.job.setMapperClass(LogMapper.class);job.setReducerClass(LogReducer.class);//4.job.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(NullWritable.class);//5.job.setOutputKeyClass(Text.class);job.setOutputValueClass(NullWritable.class);//6.job.setOutputFormatClass(LogOutputFormat.class);FileInputFormat.setInputPaths(job,new Path("/root/IdeaProjects/mapReduceTest/logOutputTest/input"));FileOutputFormat.setOutputPath(job,new Path("/root/IdeaProjects/mapReduceTest/logOutputTest/output"));
//        FileInputFormat.setInputPaths(job,new Pathhadoop fs -put /usr/local/hadoop/lotus.txt /WordCountTest/input"));
//        FileOutputFormat.setOutputPath(job,new Path("/root/IdeaProjects/mapReduceTest/WordCountoutput"));//7.boolean result=job.waitForCompletion(true);System.exit(result?0:1);}
}

7.運行代碼

?8.結果如下

會多兩個文件夾,分別是log和output

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/81446.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/81446.shtml
英文地址,請注明出處:http://en.pswp.cn/web/81446.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

STM32與ESP32的區別

STM32與ESP32都是當前電子行業中廣泛使用的微控制器芯片&#xff0c;但二者在架構、功能、應用領域以及開發生態上均存在顯著差異。需要高度實時響應和低功耗的系統通常適合STM32&#xff0c;而需要網絡連接和便捷無線通訊的物聯網應用通常更適合ESP32。 一、架構與性能 STM32…

YOLOv11改進 | Neck篇 | 雙向特征金字塔網絡BiFPN助力YOLOv11有效漲點

YOLOv11改進 | Neck篇 | 雙向特征金字塔網絡BiFPN助力YOLOv11有效漲點 引言 目標檢測領域的最新進展表明,特征金字塔網絡(FPN)的設計對模型性能具有決定性影響。本文詳細介紹如何將**雙向特征金字塔網絡(BiFPN)**集成到YOLOv11的Neck部分,通過改進的多尺度特征融合機制…

Python后端框架新星Robyn:性能與開發體驗的雙重革命

引言:Python后端框架的進化之路 在Web開發領域,Python生態長期被Flask、Django等經典框架主導。隨著異步編程需求的增長和高并發場景的普及,開發者對框架性能提出了更高要求。2023年,一款名為Robyn的新型Web框架橫空出世,以其獨特的Rust底層架構和優雅的Python API設計,…

ADS學習筆記(三) 瞬態仿真

參考書籍:見資源綁定,書籍3.4 瞬態仿真,書籍鏈接: https://pan.baidu.com/s/1pjw8p7r3-1x8qcC1-hljFQ?pwd4v79 提取碼: 4v79 本文為對實驗內容的補充 瞬態仿真放大倍數與交流仿真不一致 為什么對同一個BJT電路進行交流信號仿真和進行瞬態仿真,得出交流信號仿真的放大倍數是3.…

Flask 會話管理:從原理到實戰,深度解析 session 機制

1、Flask中session 的實現原理&#xff1a;服務器與客戶端的協作 HTTP 協議是無狀態的——服務器無法區分兩次請求是否來自同一用戶。這意味著&#xff0c;用戶登錄后跳轉到其他頁面時&#xff0c;服務器會“忘記”用戶身份。 為解決這一問題&#xff0c;Web 開發中引入了會話…

學習STC51單片機16(芯片為STC89C52RCRC)

每日一言 那些讓你喘不過氣的日子&#xff0c;正是蛻變的開始。 串口編程寄存器分析&#xff08;紅色框里面的這個是串口助手里面生成的波特率初始化函數哈&#xff09; 我們就根據以上的寄存器分析&#xff0c;因為這個是配置波特率的需要的寄存器 PCON smod 0 就是PCON的bit…

crud方法命名示例

以下是基于表名dste_project_indicator&#xff08;項目指標表&#xff09;的完整命名示例&#xff0c;覆蓋各類增刪改查場景&#xff1a; 1. 表名與實體類映射 // 表名&#xff1a;dste_project_indicator // 實體類&#xff1a;DsteProjectIndicatorEntity public class Ds…

AI時代新詞-人工智能生成內容(AIGC)

一、什么是人工智能生成內容&#xff08;AIGC&#xff09;&#xff1f; 人工智能生成內容&#xff08;Artificial Intelligence Generated Content&#xff0c;簡稱AIGC&#xff09;是指利用人工智能技術生成的各種形式的內容&#xff0c;包括文字、圖像、音頻和視頻等。AIGC的…

英語六級-閱讀篇

目錄 2023年12月大學英語真題&#xff08;二&#xff09; 十五選十&#xff08;Section A&#xff09; 單詞表 短語表 譯文 Passage Two&#xff08;Section C&#xff09; 單詞表 短語表 譯文 簡介&#xff1a;其實我總結這篇文章就是平時記憶該閱讀文章單詞中出現的…

Python 爬蟲開發

文章目錄 1. 常用庫安裝2. 基礎爬蟲開發2.1. 使用 requests 獲取網頁內容2.2. 使用 BeautifulSoup 解析 HTML2.3. 處理登錄與會話 3. 進階爬蟲開發3.1. 處理動態加載內容&#xff08;Selenium&#xff09;3.2. 使用Scrapy框架3.3. 分布式爬蟲&#xff08;Scrapy-Redis&#xff…

為什么需要清除浮動?清除浮動的方式有哪些?

導語: 在前端面試中,“清除浮動”幾乎是每位面試官都會問到的基礎題。雖然浮動已經不如 Flex 和 Grid 那么常用了,但它在許多老項目中仍然占有一席之地。理解浮動的機制、掌握清除浮動的方式,是面試中體現你前端基礎扎實度的關鍵點。 一、面試主題概述 浮動(float)最初是…

一鍵啟動多個 Chrome 實例并自動清理的 Bash 腳本分享!

目錄 一、&#x1f4e6; 腳本功能概覽 二、&#x1f4dc; 腳本代碼一覽 三、&#x1f50d; 腳本功能說明 &#xff08;一&#xff09;? 支持批量啟動多個 Chrome 實例 &#xff08;二&#xff09;? 每個實例使用獨立用戶數據目錄 &#xff08;三&#xff09;? 啟動后自…

2025.05.26【Wordcloud】詞云圖繪制技巧

Most basic See what input file is needed to build this basic wordcloud. Text analysis A text analysis by Benjamin Tovarcis for document classification. 文章目錄 Most basicText analysis 探索詞云圖的奧秘什么是詞云圖&#xff1f;為什么使用詞云圖&#xff1f;如…

RuoYi前后端分離框架集成UEditorPlus富文本編輯器

一、背景 采用若依框架搭建了一個小型的電子書項目,項目前端、后端、移動端就一人,電子書的章節內容是以富文本內容進行呈現的,產品設計人員直接給了一個第三方收費的富文本編輯器截圖放到開發文檔中,提了一沓需求點,概況下來就是要做成下圖中的樣子。作為一個后端開發人…

ETL 工具與數據中臺的關系與區別

ETL 工具和數據中臺作為數據處理領域的關鍵概念&#xff0c;雖然存在一定的關聯&#xff0c;但二者有著明顯的區別。本文將深入剖析 ETL 工具與數據中臺之不同。 一、ETL 工具概述 ETL 是數據倉庫技術中的核心技術之一&#xff0c;其全稱為 Extract&#xff08;抽取&#xff…

Redis(四) - 使用Python操作Redis詳解

文章目錄 前言一、下載Python插件二、創建項目三、安裝 redis 庫四、新建python軟件包五、鍵操作六、字符串操作七、列表操作八、集合操作九、哈希表操作十、有序集合操作十一、完整代碼1. 完整代碼2. 項目下載 前言 本文是基于 Python 操作 Redis 數據庫的實戰指南&#xff0…

xdvipdfmx:fatal: File ended prematurely. No output PDF file written.

今天忽然遇到&#xff1a;使用xelatex或lualatex編譯&#xff0c;一直卡住&#xff0c;不報錯&#xff0c;也無法生成PDF&#xff0c;主動停止編譯后就報錯 xdvipdfmx:fatal: File ended prematurely. No output PDF file written. 然后&#xff0c;之前能正常編譯的一些文件…

解鎖未來AI:使用DACA模式和Agentic技術提高開發效率

學習Agentic AI:Dapr Agentic Cloud Ascent (DACA)設計模式的應用與演進 背景介紹 近年來,Agentic AI(代理型人工智能)的概念在學術界和產業界掀起了一陣熱潮。Agentic AI指的是能夠自主感知、決策和行動的智能體系統,它們不僅改變了我們與技術互動的方式,也為行業發展…

Jenkins+Docker+Harbor快速部署Spring Boot項目詳解

JenkinsDockerHarbor快速部署Spring Boot項目詳解 Jenkins、Docker和Harbor是現代DevOps流程中的核心工具&#xff0c;結合使用可以實現自動化構建、測試和部署。下面我將詳細介紹如何搭建這個集成環境。 一、各工具的核心作用 Jenkins 自動化CI/CD工具&#xff0c;負責拉取代…

第12次04 :首頁展示用戶名

登錄后&#xff0c;跳轉到首頁&#xff0c;首頁會展示用戶名&#xff1b;未登錄時&#xff0c;首頁將展示登錄與注冊的選項。 第一步&#xff1a;index.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml…