【发布时间】:2020-01-09 23:56:31
【问题描述】:
我有一个 1 TB 的 CSV 文件。它看起来像:
time,timezone,name,...
2020-01-09 04:05:12.23567,+8,test1
2020-01-09 04:06:00.00000,+8,test1
2020-01-09 04:07:00.00000,+8,test1
2020-01-09 04:08:00.00000,+8,test1
2020-01-09 04:09:00.00000,+8,test1
2020-01-09 04:07:00.00000,+8,test2
2020-01-09 04:08:00.00000,+8,test2
2020-01-09 04:09:00.00000,+8,test2
2020-01-09 12:00:00.00000,+0,test1
2020-01-09 13:00:00.00000,+0,test1
2020-01-09 14:00:00.00000,+0,test1
2020-01-09 15:00:00.00000,+0,test1
2020-01-09 19:00:00.00000,-6,test2
我想对其进行分片,以便数据位于date-name.csv 中,其中date 是UTC 日期。
在这个例子中,我最终会得到
2020-01-08-test1.csv
time,timezone,name,...
2020-01-09 04:05:12.23567,+8,test1
2020-01-09 04:06:00.00000,+8,test1
2020-01-09 04:07:00.00000,+8,test1
2020-01-09 04:08:00.00000,+8,test1
2020-01-09 04:09:00.00000,+8,test1
2020-01-08-test2.csv
time,timezone,name,...
2020-01-09 04:07:00.00000,+8,test2
2020-01-09 04:08:00.00000,+8,test2
2020-01-09 04:09:00.00000,+8,test2
2020-01-09-test1.csv
time,timezone,name,...
2020-01-09 12:00:00.00000,+0,test1
2020-01-09 13:00:00.00000,+0,test1
2020-01-09 14:00:00.00000,+0,test1
2020-01-10-test2.csv
time,timezone,name,...
2020-01-09 19:00:00.00000,-6,test2
数据集非常庞大,而我采用的 Python 方法太慢了。我希望有一些更有效的方法来使用管道和简单的 bash 命令。
【问题讨论】:
-
我天真的想法告诉我
awk '{ print > $1 "-test.csv" }'。为什么2020-01-10-test2.csv有test2而不仅仅是test?这里的规则是什么?文件名是如何创建的?日期是 UTC 重要吗?请发布您尝试过的内容,请发布您的python方法。 -
test2来自name列。日期为 UTC 至关重要。不幸的是,我无法发布 Python,但它在 Pandas 中一次加载几百万行,执行日期操作,找到唯一的日期/名称对,然后写入这些文件。 -
“太慢”有多慢?你有多少内存/CPU?硬盘还是固态硬盘?您最终有多少个独特的日期(数万、数万、数百万……)?
-
嗨@ScottKennedy 我已经编辑了我的回复。现在它应该可以工作了stackoverflow.com/a/59682909/757714