最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java實現(xiàn)MapReduce對文件進行切分的示例代碼

 更新時間:2022年01月21日 10:11:47   作者:liangzai2048  
本文主要介紹了java實現(xiàn)MapReduce對文件進行切分的示例代碼,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

比如有海量的文本文件,如訂單,頁面點擊事件的記錄,量特別大,很難搞定。
那么我們該怎樣解決海量數(shù)據(jù)的計算?

1、獲取總行數(shù)
2、計算每個文件中存多少數(shù)據(jù)
3、split切分文件
4、reduce將文件進行匯總

例如這里有百萬條數(shù)據(jù),單個文件操作太麻煩,所以我們需要進行切分
在切分文件的過程中會出現(xiàn)文件不能整個切分的情況,可能有剩下的數(shù)據(jù)并沒有被讀取到,所以我們每個切分128條數(shù)據(jù),不足128條再保留到一個文件中

創(chuàng)建MapTask

import java.io.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class MapTask extends Thread {
    //用來接收具體的哪一個文件
    private File file;
    private int flag;

    public MapTask(File file, int flag) {
        this.file = file;
        this.flag = flag;
    }

    @Override
    public void run() {
        try {
            BufferedReader br = new BufferedReader(new FileReader(file));
            String line;
            HashMap<String, Integer> map = new HashMap<String, Integer>();
            while ((line = br.readLine()) != null) {
                /**
                 * 統(tǒng)計班級人數(shù)HashMap存儲
                 */
                String clazz = line.split(",")[4];
                if (!map.containsKey(clazz)) {
                    map.put(clazz, 1);
                } else {
                    map.put(clazz, map.get(clazz) + 1);
                }
            }
            br.close();
            BufferedWriter bw = new BufferedWriter(
                    new FileWriter("F:\\IDEADEMO\\shujiabigdata\\part\\part---" + flag));
            Set<Map.Entry<String, Integer>> entries = map.entrySet();
            for (Map.Entry<String, Integer> entry : entries) {
                String key = entry.getKey();
                Integer value = entry.getValue();
                bw.write(key + ":" + value);
                bw.newLine();
            }
            bw.flush();
            bw.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

創(chuàng)建Map

import java.io.File;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Map {
    public static void main(String[] args) {
        long start = System.currentTimeMillis();
        // 多線程連接池(線程池)
        ExecutorService executorService = Executors.newFixedThreadPool(8);
        // 獲取文件列表
        File file = new File("F:\\IDEADEMO\\shujiabigdata\\split");
        File[] files = file.listFiles();
        //創(chuàng)建多線程對象
        int flag = 0;
        for (File f : files) {
            //為每一個文件啟動一個線程
            MapTask mapTask = new MapTask(f, flag);
            executorService.submit(mapTask);
            flag++;
        }
        executorService.shutdown();
        long end = System.currentTimeMillis();
        System.out.println(end-start);
    }
}

創(chuàng)建ClazzSum

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.HashMap;

public class ClazzSum {
    public static void main(String[] args) throws Exception {
        long start = System.currentTimeMillis();
        BufferedReader br = new BufferedReader(
                new FileReader("F:\\IDEADEMO\\shujiabigdata\\data\\bigstudents.txt"));
        String line;
        HashMap<String, Integer> map = new HashMap<String, Integer>();
        while ((line = br.readLine()) != null) {
            String clazz = line.split(",")[4];
            if (!map.containsKey(clazz)) {
                map.put(clazz, 1);
            } else {
                map.put(clazz, map.get(clazz) + 1);
            }
        }
        System.out.println(map);
        long end = System.currentTimeMillis();
        System.out.println(end-start);
    }
}

創(chuàng)建split128

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.ArrayList;

public class Split128 {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(
                new FileReader("F:\\IDEADEMO\\shujiabigdata\\data\\students.txt"));

        //用作標(biāo)記文件,也作為文件名稱
        int index = 0;
        BufferedWriter bw = new BufferedWriter(
                new FileWriter("F:\\IDEADEMO\\shujiabigdata\\split01\\split---" + index));

        ArrayList<String> list = new ArrayList<String>();
        String line;
        //用作累計讀取了多少行數(shù)據(jù)
        int flag = 0;
        int row = 0;
        while ((line = br.readLine()) != null) {
            list.add(line);
            flag++;
            // flag = 140
            if (flag == 140) {// 一個文件讀寫完成,生成新的文件
                row = 0 + 128 * index;
                for (int i = row; i <= row + 127; i++) {
                    bw.write(list.get(i));
                    bw.newLine();
                }
                bw.flush();
                bw.close();
                /**
                 * 生成新的文件
                 * 計數(shù)清零
                 */
                index++;
                flag = 12;
                bw = new BufferedWriter(
                        new FileWriter("F:\\IDEADEMO\\shujiabigdata\\split01\\split---" + index));
            }
        }
        //文件讀取剩余128*1.1范圍之內(nèi)
        for (int i = list.size() - flag; i < list.size(); i++) {
            bw.write(list.get(i));
            bw.newLine();
        }
        bw.flush();
        bw.close();
    }
}

創(chuàng)建Reduce

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.HashMap;

public class Reduce {
    public static void main(String[] args) throws Exception {
        long start = System.currentTimeMillis();
        HashMap<String, Integer> map = new HashMap<String, Integer>();
        File file = new File("F:\\IDEADEMO\\shujiabigdata\\part");
        File[] files = file.listFiles();
        for (File f : files) {
            BufferedReader br = new BufferedReader(new FileReader(f));
            String line;
            while ((line = br.readLine()) != null) {
                String clazz = line.split(":")[0];
                int sum = Integer.valueOf(line.split(":")[1]);
                if (!map.containsKey(clazz)) {
                    map.put(clazz, sum);
                } else {
                    map.put(clazz, map.get(clazz) + sum);
                }
            }
        }
        long end = System.currentTimeMillis();
        System.out.println(end-start);
        System.out.println(map);
    }
}

最后將文件切分了8份,這里采用了線程池,建立線程連接,多個線程同時啟動,比單一文件采用多線程效率更高更好使。

到此這篇關(guān)于java實現(xiàn)MapReduce對文件進行切分的示例代碼的文章就介紹到這了,更多相關(guān)java MapReduce 文件切分內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springboot注解Aspect實現(xiàn)方案

    springboot注解Aspect實現(xiàn)方案

    本文提供一種自定義注解,來實現(xiàn)業(yè)務(wù)審批操作的DEMO,不包含審批流程的配置功能。對springboot注解Aspect實現(xiàn)方案感興趣的朋友一起看看吧
    2022-01-01
  • Spring實戰(zhàn)之類級別緩存實現(xiàn)與使用方法

    Spring實戰(zhàn)之類級別緩存實現(xiàn)與使用方法

    這篇文章主要介紹了Spring實戰(zhàn)之類級別緩存實現(xiàn)與使用方法,結(jié)合實例形式分析了Spring類級別緩存配置、屬性、領(lǐng)域模型等相關(guān)操作技巧,需要的朋友可以參考下
    2020-01-01
  • Java中輸入輸出方式詳細講解

    Java中輸入輸出方式詳細講解

    這篇文章主要給大家介紹了關(guān)于Java中輸入輸出方式的相關(guān)資料,Java輸入輸出是指使用java提供的一些類和方法來實現(xiàn)數(shù)據(jù)的輸入和輸出,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-09-09
  • activiti實現(xiàn)員工請假流程解析

    activiti實現(xiàn)員工請假流程解析

    這篇文章主要介紹了activiti實現(xiàn)員工請假流程解析,本文通過實例代碼圖文相結(jié)合給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • RocketMQ?producer發(fā)送者淺析

    RocketMQ?producer發(fā)送者淺析

    RocketMQ生產(chǎn)者是一種高性能、可靠的消息發(fā)送者,能夠?qū)⑾⒖焖?、可靠地發(fā)送到RocketMQ消息隊列中。它具有多種消息發(fā)送模式和消息發(fā)送方式,可以根據(jù)不同的業(yè)務(wù)需求進行靈活配置
    2023-04-04
  • 淺談對象與Map相互轉(zhuǎn)化

    淺談對象與Map相互轉(zhuǎn)化

    這篇文章主要介紹了利用BeanMap進行對象與Map的相互轉(zhuǎn)換,在文中列舉了完整代碼,需要的朋友可以參考下。
    2017-09-09
  • SpringCloud超詳細講解微服務(wù)網(wǎng)關(guān)Zuul

    SpringCloud超詳細講解微服務(wù)網(wǎng)關(guān)Zuul

    這篇文章主要介紹了SpringCloud Zuul微服務(wù)網(wǎng)關(guān),負載均衡,熔斷和限流,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • Java中斷線程的方法

    Java中斷線程的方法

    這篇文章主要介紹了Java中斷線程的方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-05-05
  • 解決redisTemplate中l(wèi)eftPushAll隱性bug的問題

    解決redisTemplate中l(wèi)eftPushAll隱性bug的問題

    這篇文章主要介紹了解決redisTemplate中l(wèi)eftPushAll隱性bug的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • springboot 參數(shù)格式校驗操作

    springboot 參數(shù)格式校驗操作

    這篇文章主要介紹了springboot 參數(shù)格式校驗操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07

最新評論

康马县| 海盐县| 建瓯市| 淳安县| 青浦区| 汝南县| 砚山县| 金门县| 抚远县| 金华市| 饶阳县| 突泉县| 吉林市| 漾濞| 华容县| 汉沽区| 伊宁市| 措勤县| 甘孜| 苗栗县| 丽水市| 济宁市| 六盘水市| 郎溪县| 义乌市| 扎赉特旗| 郴州市| 长岛县| 浦东新区| 锡林郭勒盟| 安达市| 鄂托克前旗| 府谷县| 建昌县| 康保县| 介休市| 晋城| 司法| 车致| 宜良县| 大兴区|