csv文件存储数据时在结构上基本和一个数据库表相当,不过因为读写方便,所以使用频率很高,例如输出一些临时结果,或者持续记录类似日志形式的数据。不过,当需要对这些数据进一步处理时,如果还要先导入数据库,那么csv本身的便利性也就没有了。

事实上,通过集算器,可以直接对csv文件进行处理,而且还可以进行一些“高级”操作,就像本文要介绍的比较两个csv文件的差异。

假设在一个简单的销售系统中,前端系统只负责录入,包括新增、修改和删除订单,同时,每天会把数据文件做一次备份归档。在后期分析中,需要查看某个时间段内的新增、取消和修改的订单。下面就是不使用数据库,直接比较csv文件的操作。

例子中使用了2015年3月的两个文件,早一点的是old.csv,晚一点的是new.csv。文件中的逻辑主键是userName和date,需要分别找出新增的、删除的、修改的数据行。源文件如下:

直接观察数据,可以看到new.csv中的第2、3行是新增的记录,第4行是修改的记录,old.csv中第3行是删除的记录。

集算器代码如下:

A1,B1:以逗号为分隔符读入文件。

A2,B2:将数据按照关键字排序。因为后面使用merge函数要求数据有序。

A3:函数merge可进行多数据集归并,使用选项@d表示归并时找出差集。类似地还有并集选项@u,交集选项@i。新增记录实际上就是较新的数据和较旧数据按关键字的差集,计算结果如下:

A4:同样的,较旧数据和较新数据按关键字的差集就是删除的记录,计算结果如下:

A5:将关键字作为普通字段计算差集,找到修改过的所有记录。计算结果如下:

A6:要计算更新的记录,把A5作为中间计算结果,计算A5和“新增”记录之间的差集。计算结果如下:

B6:将A6返回给JAVA或报表工具。

上述脚本完成了所有的数据处理工作,接下来还可以通过JDBC将集算器脚本集成在JAVA里。JAVA代码如下:

//建立esProc jdbc连接

Class.forName("com.esproc.jdbc.InternalDriver");

con= DriverManager.getConnection("jdbc:esproc:local://");

//调用esProc,其中test是脚本文件名,可接收参数

st =(com.esproc.jdbc.InternalCStatement)con.prepareCall("call test()"); com.esproc.jdbc.InternalCStatement st = (com.esproc.jdbc.InternalCStatement)con.prepareCall("call test()");

st.execute();//执行esProc存储过程

ResultSet set = st.getResultSet();//获得计算结果

而如果要将多个数据集返回给JAVA,可以将B6的代码改为:return new,delete,update。

java处理超大csv文件_比较 csv 文件中数据差异相关推荐

  1. 用python的pandas打开csv文件_使用CSV模块和Pandas在Python中读取和写入CSV文件

    什么是CSV文件? CSV文件是一种纯文本文件,其使用特定的结构来排列表格数据.CSV是一种紧凑,简单且通用的数据交换通用格式.许多在线服务允许其用户将网站中的表格数据导出到CSV文件中.CSV文件将 ...

  2. python对数据进行分类、文件是csv文件_用Python将处理数据得到的csv文件分类(按顺序)保存...

    用Python中的os和numpy库对文件夹及处理数据后得到的文件进行分类保存: import numpy as np import os for m in range(699,0,-35): cur ...

  3. 学java要学spss吗_将SPSS文件读入R中

    回答(14) 2 years ago 我有一个类似的问题,并在 read.spss 帮助中提示后解决了这个问题 . 使用包 memisc ,您可以导入 portable SPSS文件,如下所示: da ...

  4. java删除本地文件_读取Properties文件六种方法

    使用java.util.Properties类的load()方法 示例: InputStream in = lnew BufferedInputStream(new FileInputStream(n ...

  5. java怎么导入文件_怎么将文件导入java

    这篇文章主要介绍了Java的写入文件的几种方法,需要的朋友可以参考下: 一.FileWritter写入文件 FileWritter,字符流写入字符到文件.默认情况下,它会使用新的内容取代所有现有的内容 ...

  6. java 删除压缩zip文件_从ZIP存档中删除文件,而无需在Java或Python中解压缩 - java...

    从ZIP存档中删除文件,而无需使用Java(首选)或Python解压缩 你好 我使用包含数百个高度压缩的文本文件的大型ZIP文件.解压缩ZIP文件时,可能要花一些时间,并且很容易消耗多达20 GB的磁 ...

  7. java 中io的删除文件_总结删除文件或文件夹的7种方法-JAVA IO基础总结第4篇

    本文是Java IO总结系列篇的第4篇,前篇的访问地址如下: 如果您阅读完成,觉得此文对您有帮助,请给我点个赞,您的支持是我不竭的创作动力. 为了方便大家理解,我特意制作了本文对应的视频:总结删除文件 ...

  8. java字节流读取文件_字节流读取文件 java的几种IO流读取文件方式

    java字节流怎么读取数据 字节流读取数据例子如下: import java.io.File;import java.io.FileInputStream;import java.io.FileNot ...

  9. java 异步写文件_异步读取文件实例

    1.目的: 通过异步的方式,读取sdcard中的文件,并显示读取进度,最后将读取的文件显示在指定的位置 2.代码 1 packagecom.example.myfile;2 3 importjava. ...

最新文章

  1. JavaEE(14) - JPA关联映射
  2. 商品规格可选怎么设计_商品模块数据库表解析(一)
  3. easymock 图片_easy-mock的使用
  4. 实验二十二 SCVMM中的SQL Server配置文件
  5. ThreadPoolExecutor机制
  6. AddStaticMeshComponent
  7. Java经典实例:处理单个字符串
  8. Rust LeetCode 练习:929 Unique Email Addresses
  9. OpenShift 4 之AMQ Streams(2) - 用Kafka Connect访问数据源
  10. pandas错误之: in pandas._libs.hashtable.PyObjectHashTable.get_item
  11. Smoke Test Ad hoc Test
  12. Linux系统下的软件安装
  13. linux中安装yum简单方法
  14. 解析数论导轮中的数学实验(python)
  15. 安装ubunut双系统,如何删除其中一个
  16. JS Module Revealing Module Pattern
  17. Shim特性是什么?
  18. matlab中单刀双掷开关,单刀双掷开关与双刀双掷开关的区别
  19. excel计算一年第几周
  20. thinkphp5-php think常用命令

热门文章

  1. 服务器维护家电需要电工证吗,物业电工需要电工证吗
  2. php 面向对象进阶,PHP面向对象进阶设计模式:解释器模式使用实例
  3. tomcat架构分析(容器类)
  4. 查找算法(一)顺序查找
  5. [国嵌攻略][125][总线设备驱动模型]
  6. 一个很cool的C#的高性能数学库
  7. POJ 1155 TELE【树形DP】
  8. JavaScript与JSP区别
  9. File类的mkdir()与mkdirs()方法的区别
  10. wpf 轮询mysql数据库_WPF非轮询方式实时更新数据库变化SqlDependency