【发布时间】:2017-02-01 19:49:50
【问题描述】:
我有几个 CSV 文件,其中包含超过 1000 万个值,每个值长 9 个字符。我的目标是将每个文件分成两个大小相等的文件,其中每一半是从初始集中随机选择的值。
我正在考虑使用 PHP 来做这件事(因为我对它有点熟悉)。
我可以想到两种可能的方法来做到这一点,但好奇 (1) 哪一种会跑得更快? (2) 有没有更好的方法? (3) 还是用10到1500万左右的数据集没关系?
计划一:
- 将 CSV 转换为数组
- 使用 shuffle() 函数对数组进行随机播放
- 使用 array_chunk() 函数将数组一分为二
- 将每个数组保存到 CSV 文件(不知道如何解决,但会弄清楚)
计划 2:
- 将 CSV 转换为数组
- 使用 array_rand() 随机选择 X 个值,其中 X =(值数 / 2),并根据该选择创建数组
- 对后半部分的值重复第 2 步
- 将每个新数组保存到 CSV 文件
这是靠近正确的地方吗?我应该考虑使用其他语言吗?
谢谢!
【问题讨论】:
-
如果文件那么大,忘记使用数组(内存要求太高)......创建一个临时数据库表,将数据加载到其中并在回写之前通过数据库处理所有随机化归档
-
您的服务器是否有内存可以在数组中存储 9000 万个字符?
-
最快/最简单的方法是通过 Linux shell 命令
wc -l file获取#of 行和split -l X file,其中 X 是 wc 命令给你的一半。很多“拆分”的例子,比如这个……howtogeek.com/howto/ubuntu/… -
@DuaneLortie - 这能解决问题的“随机化”部分吗?
-
这个问题是矛盾的..“将大数据集分成两个大小相同的数据集”..两个大小相同的数据集不是随机拆分