如何过滤和排序几个gb的数据?

时间:2017-06-18 17:08:28

标签: java database bigdata

我有36gb大文件,在这个结构中有大约600万行数据:

LogID,SensorID,ValueNumeric,ValueString,DateAdded,VariableName,Name   
1215220724,1182,1,0000,,2016-01-04 12:56:57.7770000,Scan_Frequency,MIC_2

我只对日期,值,变量名和流(名称)感兴趣。问题是有很多重复的托管,而且数据没有按日期排序。

我目前的解决方案是,我通过前100,000行,读取变量的名称(其中有833行)并在DB中为每个变量创建一个表。对于主键我使用日期(我已经切断了秒和毫秒),所以我的DB将没有重复。我知道这不是最好的主键字符串。

然后我再次读取文件并在表格中输入该数据,但速度很慢。我的估计是我最终应该减少至少10倍的线路。

有没有人有更好的想法,如何阅读这么大的文件并按日期排序并删除重复项。以5分钟的间隔保存数据就足够了。

2 个答案:

答案 0 :(得分:1)

我使用基于Elasticsearch + Logstash的解决方案(它们是免费的,并且可以很好地安装默认设置)。 Logstash旨在从多个来源(包括CSV文件)中提取数据,而Elasticsearch是一个NoSql数据库,它可以为索引文档和查询文档做出惊人的工作。

请参阅this question and answer作为起点,并here is the documentation

答案 1 :(得分:0)

您的数据库将提供直接导入csv文件的工具。这很可能比使用JDBC快得多。此外,机会很高,它还提供了一个工具来删除您在导入过程中提到的重复项。在数据库中有数据后,它将负责为您排序数据。 举个例子:如果您使用的是MySQL,那么MySQL导入实用程序mysqlimport也提供了一个选项,可以使用--replace在导入过程中删除重复项。