如何排序大量不一致的数据?

时间:2013-12-23 18:17:29

标签: java csv sorting consistency large-data

对于我的编程课程,我已经获得了103MB的CSV文件。有一个中等大小的文件有40 000行,我估计一切都是大约30万行。我试图逐行对数据进行排序并将其转换为对象,但是一个字段非常不一致。


通常,整行是:

  

[电台号码],[参数说明的缩写],[参数说明],[日期(MM / DD / YYYY)],[时间]等...

然而,参数描述是不一致的。在其中,有不同的单词组合,格式甚至不相同。有时候事物是缩写的,有时候中间有一个空格,有时会有10个。

以下是参数说明字段的一些示例:

(化学),(过滤/未过滤)TOTAL

(化学)TOTAL,(过滤/未过滤)

电导率,25C

STREAM CONDITION

<化学品],溶解(无机/有机)

另外......有时在化学品之后会出现“UNFILTERED REACTIVE”,有时会出现“UNFIL.REA”


请帮忙,因为我不知道如何组织参数说明字段。这些只是我在6 000行中发现的一些。我几乎看不到30万行,看看每行有什么。

此外,如果它有帮助,这是安大略省水流质量数据,我用Java编码(尽管伪代码是可以的。)

2 个答案:

答案 0 :(得分:0)

如果Parameter Description是唯一包含逗号的字段,则应该可以使用逗号作为分隔符split行,并分别从开头和结尾开始提取其余字段。 (前两个和最后一个x结果字符串将分别对应一个字段。)

剩余的字符串将是Parameter Description字段,可以再次组合在一起。别忘了恢复逗号......

答案 1 :(得分:0)

我对此有不同的方法

我也在我的项目中应用了相同的内容。

这可能会缩短整个内容的排序时间,与当前状态相比

并且根据 KarlP 的答案,您需要做一些额外的操作,这可能会导致更多的计算时间而不是正常


我的方式

创建一个删除所有空格,逗号和任何其他特殊字符的方法,并且您也可以替换数字,因为当您使用 description (如字段)进行短路时,它们不能发挥良好作用

所以结果将是这样的

// fn_getOnlyText replaces all chars which don't play role in alphabetical sorting as per your case

   fn_getOnlyText("Parameter Description");

然后使用这个新字段进行排序,这将是基于字典的排序,因此它将比原始内容快得多。