在较大数据集中使用java文件处理技术获取目标数据

本文介绍了在处理320G大型数据集时,如何利用Java进行文件处理和目标数据截取。通过将数据分为16个20G文件,然后对每个文件中特定列进行快速排序和二分查找,提取最大值和最小值。此外,还涉及文件的读取、排序算法的选择以及数据保存等关键步骤。
摘要由CSDN通过智能技术生成

      实验中可能会接触到各种大小的数据库,随着机器学习和深度学习的广泛使用,实验中使用的数据库也越来越大。但是有些原始的开源数据库并不一定适合实验条件,因此需要对数据进行预处理。对于规模达到一定程度的数据库,如何进行处理是一件不好弄的事情。 由于最近在实验中需要对数据集进行预处理,数据集数据量较大,考虑到人工进行数据包的截取比较费力费时,就写了一个数据处理的小工具,处理的核心是对文件的操作,接下来就简单说说我在预处理工作中的对目标数据的截取。本次实验处理的数据库大小320G,分为16个文件,也就是每个文件将近20G大小数据空间,对每个文件进行独立数据包的截取。数据库存放的是离散数字信号。

java文件处理一些技巧

      java提供很多文件处理的API,文件输入输出流,字符流或者字节流等等。常见的操作包括:

创建一个文件

File f=new File("文件地址");
f.createNewFile();

读写文件

      采用带缓冲的方式读文件很常用,readLine()可以实现一次性读取文本文件一行的内容,这种方式在实际中能带来很大便利,特别是需要解析协议的场合。

            FileInputStream fis=new FileInputStream(f);              //创建一个输入流对象fis,并且以f作为参数
            InputStreamReader isr=new InputStreamReader(fis);        //转换成字符串流
            BufferedReader br=new BufferedReader(isr);               //带有缓冲功能的输入流对象
        FileOutputStream fos=new FileOutputStream(f);
        OutputStreamWriter osw=new OutputStreamWriter(fos);
        BufferedWriter bw=new BufferedWriter(osw);

使用readLine间接测试一个文件的长度

      通常我们可以通过以下代码间接得知一个文本文件的有多少行。

while(br.readLine()!=null)//readLine读到第24行
 {
    ++lineIndex;
}            

      通常readLine()与split配合使用,readLine读取一行的内容通常是有一个数据格式的String,假设是以“:”或者“,”隔开的就可以使用split进行划分开来,下面给出split常用的一种示例:

String str="12:32:63.333";
String[] strGet=str.split(":");
...//可以将字符串转换为double或者int

以上String数组中通过split接收的数据是:

strGet[0]="12";
strGet[1]="32";
strGet[2]="63.333";

      关于java文件操作就说到这了,前面一篇文章已经写了基本的输入输出流常见操作,包括随机访问seek指针等操作。接下来说说目标数据是如何在20G的数据包中快速截取和保存。

step1:首先对320G文件进行分组,可分为16个文件,每个文件就是20G。

step2::分别提取每个文件中的两个关键字。两个关键字为该单个文件的数据的(某一列)的最大值和最小值。在提取这两个关键字过程中还需要做的一件事就是对该列进行排序。这个文件可以类比数据库表的结构,由多列构成,但是列的具体数量不明。这里与数据库不同的是仅仅关注该列的信息,多余其他列的信息可以暂时不考虑,因此在这里的做法仅仅是关心目标列的处理。对该列首先需要排序,前面在java数据结构和算法中讲过很多八大排序算法,由于数据量较大,这里可以考虑使用快速排序算法进行排序。以下是快速排序算法的连接:

http://blog.csdn.net/cai2016/article/details/52558238

step3::快速排序之后得到每个文件的有序目标列的有序数据。该步骤就是查找了,在有序数据集上对数据进行查找选择二分排序,这样效率较高。

step4::之后的步骤就是对文件的一些边界检测和一些异常值的处理。

step5::对截取的数据进行保存。

      另外使用数据库对数据进行处理也是可以选择的途径。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值