gpt4 book ai didi

java - 分析庞大的数字数据集

转载 作者:行者123 更新时间:2023-12-01 14:01:52 25 4
gpt4 key购买 nike

我对大数据主题完全陌生。我必须分析一个近 10 GB 的带有数字的文本文档。这些数字接近 10 亿,所以对我来说,分析这样的文档并不容易。该文档的结构就像一个列表,一行一个数字。我的主要问题是,您认为分析这些庞大数据集的最佳机会是什么?我的目的是找出列表包含多少个不同的数字,我想保存这个结果。

输入是这样的,有近十亿行:

123801
435345
123
7
43958112
4569
45
509858172
...

输出应如下所示(仅作为示例):

1 2
2 4
3 1
4 109
5 56
...
up to nearly one billion

首先,我尝试使用 linux/unix 'sort' 和 'unique' 以及特定参数,但对于这样的情况,这不是一个解决方案。

我的下一个想法是尝试对数据集实现快速排序或合并排序。是否可以用 Java 或其他语言来分析/加载这样的内容?我读到 ArrayList 在 Java 列表中开销最小。如果可能的话,我想我可以尝试实现一个 for 循环,该循环将递增到数字“n”,并且如果 nextElement != thisElement 退出 for 循环。我想我可以通过增加一个变量来保存计数,如果条件正确则设置为零。您对这个想法以及这个问题有何看法?

我也想过为这个数据集建立一个数据库。这是更好的机会吗?如果是,哪个 DBMS 是最好的?

我对其他任何事情都持开放态度,我非常感谢您的意见、想法和解决方案!

最佳答案

如果您遵循以下模式,则可以并行完成:

1) 将文件分割成可管理的 block (您需要使用“split -l”在行边界处分割,因此不要选择以 MB 为单位的绝对大小,而是选择适当的行数)

2)分析每个 block ,“awk”(gawk)脚本可以有效地做到这一点,因为文件大小不太大,内存需求将是合理的;将这些中间结果写入每个 block 的单独文件中。

3)合并所有分析的结果 - 但这仍然需要太多的内存;
也许您的脚本仅合并来自所有 block 的选定范围的数字,即数字 0..1000000、200000..3000000 等;这些结果对于每个范围都是明确的。对前几个 block 的初步分析可能会让您了解值的分布以及在何处设置这些边界。

4)最后将这些结果合并到一个文件中

我在这里建议标准 shell 实用程序,因为它们非常适合文本处理,并且可以通过这种方式完成,但大多数语言应该能够应对。

根据最大数字有多大,您可能需要在 Java 中使用 BigInteger;另一方面,“awk”只是将它们视为文本,因此这不是问题。

关于java - 分析庞大的数字数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19294598/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com