如何根据日期列在不同的文本/csv文件中转储一个巨大的mysql表?
Posted
技术标签:
【中文标题】如何根据日期列在不同的文本/csv文件中转储一个巨大的mysql表?【英文标题】:How to dump a huge mysql table in different text/csv files based on the date column? 【发布时间】:2021-10-21 03:59:09 【问题描述】:我有一个包含数百万条记录的巨大 mysql 表。我有一个用例,根据日期列,我想将结果拆分并转储到不同的文本文件中。
例如:
col_1 col_2 date_col
a b 20-12-2021
a b 20-12-2021
a2 b2 21-12-2021
.. .. ...
所以row1
和row2
将转到名为20_12_2021.csv
的CSV,row3
将转到21_12_2021.csv
。我现在正在做的是我正在使用 Python 来获取结果,然后逐行循环,然后确定结果将去哪里,但这需要很长时间。
有没有更好更优化的方法来做到这一点?
【问题讨论】:
您是如何将表格从MySQL
读取到pandas,或者您已经将数据转储到CSV 并且现在只是解析相同?有不错的so post, MySQL : retrieve a large select by chunks
现在,我将结果放入 1000 行的块中并对其进行迭代。
如果没有敏感信息,您应该发布您的代码,以获得正确的建议或解决方案,因为我看到即使使用 chunksize
也无助于减少内存,我已经提到了一些参考资料你可以检查一下。
@KarnKumar ,代码在我的办公室笔记本电脑上,我无法复制粘贴。我将尝试创建一个示例代码。请允许我一段时间。
阿提夫,我明白了。
【参考方案1】:
我喜欢这个解决方案,您可以在其中使用 df.groupby
和 date_col
列,这将使用映射器或轴上的一系列列对 DataFrame 进行分组 0
默认情况下,并表示行。
解决方案:
for name, g in df.groupby('date_col'):
g.to_csv(f'name.csv', index=False)
Result:
$ cat 20-12-2021.csv <-- CSV file created
col_1,col_2,date_col
a,b,20-12-2021
a,b,20-12-2021
$ cat 21-12-2021.csv <-- CSV file created
col_1,col_2,date_col
a2,b2,21-12-2021
或
df.groupby('date_col').apply(lambda x: x.to_csv('.csv'.format(x.name), index=False))
注意:如果您对 MYSQL 有效地了解一百万行,那么@ThePhysicist 的Pandas now has built-in support for chunked loading 有一个很好的答案。
阿劳看Reading table with chunksize still pumps the memory
【讨论】:
让我试试这个。 既然这是一张巨大的桌子,把它放在内存中不是问题吗? .由于 pandas 将数据帧转储到内存中。 尝试使用lambda
函数,如df.groupby('date_col').apply(lambda x: x.to_csv('.csv'.format(x.name), index=False))
以上是关于如何根据日期列在不同的文本/csv文件中转储一个巨大的mysql表?的主要内容,如果未能解决你的问题,请参考以下文章