`
m635674608
  • 浏览: 5043074 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

高效读取大数据文本文件(上亿行数据)

    博客分类:
  • java
 
阅读更多
package com.gqshao.file.util;

import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.gqshao.file.io.BufferedRandomAccessFile;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;

import java.io.*;
import java.util.List;
import java.util.Map;

public class FileUtil {

    /**
     * 通过BufferedRandomAccessFile读取文件,推荐
     *
     * @param file     源文件
     * @param encoding 文件编码
     * @param pos      偏移量
     * @param num      读取量
     * @return pins文件内容,pos当前偏移量
     */
    public static Map<String, Object> BufferedRandomAccessFileReadLine(File file, String encoding, long pos, int num) {
        Map<String, Object> res = Maps.newHashMap();
        List<String> pins = Lists.newArrayList();
        res.put("pins", pins);
        BufferedRandomAccessFile reader = null;
        try {
            reader = new BufferedRandomAccessFile(file, "r");
            reader.seek(pos);
            for (int i = 0; i < num; i++) {
                String pin = reader.readLine();
                if (StringUtils.isBlank(pin)) {
                    break;
                }
                pins.add(new String(pin.getBytes("8859_1"), encoding));
            }
            res.put("pos", reader.getFilePointer());
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            IOUtils.closeQuietly(reader);
        }
        return res;
    }

    /**
     * 通过RandomAccessFile读取文件,能出来大数据文件,效率低
     *
     * @param file     源文件
     * @param encoding 文件编码
     * @param pos      偏移量
     * @param num      读取量
     * @return pins文件内容,pos当前偏移量
     */
    public static Map<String, Object> readLine(File file, String encoding, long pos, int num) {
        Map<String, Object> res = Maps.newHashMap();
        List<String> pins = Lists.newArrayList();
        res.put("pins", pins);
        RandomAccessFile reader = null;
        try {
            reader = new RandomAccessFile(file, "r");
            reader.seek(pos);
            for (int i = 0; i < num; i++) {
                String pin = reader.readLine();
                if (StringUtils.isBlank(pin)) {
                    break;
                }
                pins.add(new String(pin.getBytes("8859_1"), encoding));
            }
            res.put("pos", reader.getFilePointer());
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            IOUtils.closeQuietly(reader);
        }
        return res;
    }

    /**
     * 使用LineNumberReader读取文件,1000w行比RandomAccessFile效率高,无法处理1亿条数据
     *
     * @param file     源文件
     * @param encoding 文件编码
     * @param index    开始位置
     * @param num      读取量
     * @return pins文件内容
     */
    public static List<String> readLine(File file, String encoding, int index, int num) {
        List<String> pins = Lists.newArrayList();
        LineNumberReader reader = null;
        try {
            reader = new LineNumberReader(new InputStreamReader(new FileInputStream(file), encoding));
            int lines = 0;
            while (true) {
                String pin = reader.readLine();
                if (StringUtils.isBlank(pin)) {
                    break;
                }
                if (lines >= index) {
                    if (StringUtils.isNotBlank(pin)) {
                        pins.add(pin);
                    }
                }
                if (num == pins.size()) {
                    break;
                }
                lines++;
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            IOUtils.closeQuietly(reader);
        }
        return pins;
    }


}

 http://sgq0085.iteye.com/blog/2215318

分享到:
评论

相关推荐

    JS快速读取TXT大数据.zip

    标题“JS快速读取TXT大数据.zip”所涉及的知识点主要集中在JavaScript(JS)技术上,特别是如何高效地处理大量文本数据。在这个场景中,我们关注的是在Internet Explorer(IE)浏览器中利用JavaScript来读取和展示大...

    大数据文本三剑客详细知识点

    "大数据文本三剑客"指的是Linux环境中用于处理和分析大量文本数据的重要工具——grep、sed和awk。这些工具在大数据领域扮演着不可或缺的角色,因为它们能够高效地处理文本数据,进行搜索、替换、修改和过滤等操作。 ...

    读文本文件处理数据

    在IT行业中,处理数据是一项核心任务,特别是在数据...总的来说,读取和处理文本文件涉及到编程语言的基本操作、数据解析技巧以及高效的数据处理库。熟练掌握这些技能,将有助于在各种IT项目中有效地管理和分析数据。

    基于大数据文本聚类关联的网络招聘信息挖掘.doc

    3.1 读取网页招聘信息文本文件:首先,需要从招聘网站抓取或爬取招聘信息,这通常涉及到网络爬虫技术,以获取最新的、大量的招聘数据。 3.2 招聘信息文本分词:分词是文本预处理的关键步骤,通过将句子分割成词汇...

    将一个txt里的大数据以每1000行输出保存一个新的txt批处理

    描述中提到的“若是你有几百万数据的一个文本,想把数据分割成每个1000条”,这表明我们需要处理的文本文件可能包含数百万行的数据,对这样的文件进行操作需要高效的策略。批处理脚本就是一种解决方案,它可以快速地...

    大数据基础-数据采集与预处理.pdf

    启动Flume Agent时,它会读取配置文件并开始数据采集。 Flume提供了多种类型的Source,如Exec源执行Unix命令来收集数据,而Spool目录源则监视特定目录,当新文件出现时进行数据采集。这些源的灵活性使得Flume能够...

    CSV大数据分批并压缩导出

    CSV(Comma Separated Values)是一种广泛使用的数据格式,它以纯文本形式存储表格数据,每行代表一个记录,列之间用逗号分隔。由于CSV文件的简单结构,它们可以被多种软件工具读取,包括电子表格程序(如Microsoft ...

    VB_高速读取文本

    在VB(Visual Basic)编程中,高效地读取文本文件是一项关键技能,特别是在处理大量数据时。本主题将深入探讨如何使用VB实现高速读取文本文件的方法,旨在提高程序的性能和效率。 首先,让我们了解VB中最常见的文本...

    文本文件,删除重复行

    本文将探讨如何高效地删除文本文件中的重复行,重点介绍一个使用Pascal语言实现的解决方案,该方案能在短短0.3秒内处理含有100万行、100MB的文本文件。 首先,我们需要理解“删除重复行”的概念。在文本文件中,...

    易语言大文件读写模块

    这在处理文本文件时特别实用,比如读取日志、CSV数据等。这个函数可能包括读取指定行的数据、处理行结束符(如换行符)以及错误处理等细节。 条件查询是高级功能,允许开发者根据特定条件筛选文件中的数据。这可能...

    大数据分析--数据加载、存储

    2. 使用pandas读取文本文件:read_table函数可以处理多种文本格式的数据文件,它同样会将文本数据转换为DataFrame对象。当文本文件没有明确的列名时,可以使用header=None让pandas自动分配默认列名,或者使用names...

    dm_new_one_dtl_大数据处理_用于数据汇聚和大数据统计_Perl_

    1. 数据导入:Perl可以读取多种格式的文件,如CSV、JSON、XML等,将数据加载到内存中进行处理。通过Perl的内置模块,如Text::CSV或JSON,可以轻松处理这些格式。 2. 数据清洗:在大数据处理中,数据质量至关重要。...

    自动读取文件数据实例源码.rar

    "自动读取文件数据实例源码.rar"这个资源提供了一个全面的C#实现,它能帮助开发者理解和掌握如何在不同场景下高效地读取各种类型的数据文件。 首先,我们要了解C#中读取文件的基本方法。在C#中,`System.IO`命名...

    ABAP 常用功能eg emai send & post & 钉钉&微信发送&长文本读取&大数据导出

    4. **长文本读取**:在处理大量文本数据时,ABAP提供了`CL_ABAP_TEXTUTIL`类,它包含`READ_TEXT`方法,可以用于读取超过标准长度限制的文本。这对于存储用户评论、文档内容等长文本非常有用。 5. **大数据导出**:...

    读取txt-jdbc导入百万级数据.rar

    综上所述,"读取txt-jdbc导入百万级数据.rar"是一个涉及数据读取、数据库操作、性能优化等多个技术点的实战案例,对于理解和掌握大规模数据处理有很高的参考价值。通过学习和实践这个案例,开发者可以提升自己在处理...

    文本文件压缩【huffman编码实现】

    文本文件压缩是信息处理中的一个重要领域,特别是在大数据和存储有限的场景下,高效的数据压缩技术显得尤为关键。Huffman编码是一种基于频率的无损数据压缩方法,由David A. Huffman在1952年提出,它是数据结构课程...

    易语言极速删除重复文本行

    - 对于非常大的文本文件,可以考虑分块读取,避免一次性加载所有数据导致内存压力过大。 - 如果数据有特定的排序需求,可以在写入新文件时保持原有顺序。 - 可以考虑使用多线程或异步处理来提高处理速度,但需要...

    超大文本文件查看编辑器

    1. **快速打开**:这类编辑器采用了高效的文件读取算法,能够在短时间内加载上GB大小的文本文件,极大地提高了工作效率。它能够避免因文件过大导致的系统资源占用过高,使得用户无需等待长时间的加载过程。 2. **...

    Java去重txt文件内容(按行)

    总的来说,这个Java项目展示了如何利用Java 8的Stream API和并行流特性来高效地处理文本文件,实现行级别的去重功能。这种技术对于处理大量文本数据,尤其是需要进行清洗和预处理的情况非常有用。在实际应用中,可以...

    文本文件(*.txt)分割合并

    在IT领域,文本文件处理是一项基础且重要的任务。在日常工作中,我们经常遇到需要对大量文本数据进行操作的情况,比如电子图书的整理、数据分析、日志分析等。在这个场景下,“文本文件(*.txt)分割合并”是一个非常...

Global site tag (gtag.js) - Google Analytics