【发布时间】:2013-10-10 11:30:28
【问题描述】:
我对大数据这个话题完全陌生。我必须分析一个近 10 GB 的带有数字的文本文档。这些是近 10 亿个数字,所以对我来说,像这个文件这样分析并不是那么容易。文档的结构像一个列表,一行一个数字。我的主要问题是,您认为分析这些庞大数据集的最佳机会是什么?我的目的是找出列表包含多少个不同的数字,我想保存这个结果。
输入是这样的,有近十亿行:
123801
435345
123
7
43958112
4569
45
509858172
...
输出应该是这样的(仅作为示例):
1 2
2 4
3 1
4 109
5 56
...
高达近十亿
首先我尝试了 linux/unix 'sort' 和 'unique' 以及特定的参数,但是对于这样的,它不是一个解决方案。
我的下一个想法是尝试在数据集上实现快速排序或合并排序。是否可以在 Java 或其他语言中进行这样的分析/加载?我读到 ArrayList 在 Java 列表中开销最小。如果可能的话,我想我可以尝试实现一个 for 循环,它将递增到数字 'n' 并且如果 nextElement != thisElement 退出 for 循环。我想我可以通过增加一个变量来保存计数,如果条件正确则设置为零。您如何看待这个想法,当然还有这个问题?
我也想过为这个数据集建立一个数据库。这是更好的机会吗?如果是,哪个 DBMS 是最好的?
我对其他任何事情都很开放,我非常感谢您的意见、想法和解决方案!
【问题讨论】:
-
您最好的方法必须是使用缓冲写入器并在数据库中递增每个数字,如果将其存储在堆上,则会引发异常。
-
也许您应该首先更准确地了解输入的结构,因为您写的是“一行中的一个数字”。但在示例中,您每行显示两个数字。你算什么?文件中有多少个唯一行或每个数字出现的次数?
-
对不起,这应该是它的输出,而不是输入文件。在上面进行了编辑。
-
您是否尝试对每个数字进行频率计数?
-
也许像 SAX 这样的东西可以处理这个问题,因为它能够流式传输文本,而不是将其全部加载到内存中。