mysql - 读取 csv 时出现内存错误

标签 mysql pandas csv sqlalchemy

我正在尝试将一些信息读入 Pandas DataFrame 并面临由于数据值而导致的问题。

电脑规范:

内存 32 GB

英特尔酷睿 i7 4GHz

设置:

数据位于 MySQL DB 中,9 列(7 个整数、1 个日期、1 个日期时间)。数据库位于本地计算机上,因此不存在互联网带宽问题。 2200 万。数据行。

尝试直接从 MySQL 服务器读取 - 它永远不会结束。

engine = sqlalchemy.create_engine('mysql+pymysql://root:@localhost:3306/database')

search_df = pd.read_sql_table('search', engine)

我检查过 SO,得到的印象是,最好解析 CSV,而不是使用连接器。我将表格导出为 CSV。

CSV 文件大小 - 1.5GB

我的代码

dtype = {
    'search_id' : int,
    'job_count_total' : int,
    'job_count_done' : int,
    'city_id_start' : int,
    'city_id_end' : int,
    'date_start' : str,
    'datetime_create' : str,
    'agent_id' : int,
    'ride_segment_found_cnt' : int
}

search_df = pd.read_csv('search.csv', sep=',', dtype=dtype)

我尝试了两种引擎,cpython,不同的 block 大小,low_memoryTrueFalse,指定了 dtypes,但未指定,但仍然收到 MemoryError

我尝试了上面问题中提到的所有内容(被标记为来源,我的被标记为重复),但没有任何变化。

我只发现了两个区别:

如果我在没有 block 的情况下进行解析,则会在解析时出现内存错误。

当我分块解析时 - 连接成一个 DF。

此外,按 5_000_000 行分块会在解析时产生错误,而在串联时会产生错误。

这是有关串联的错误消息:

pandas.errors.ParserError: Error tokenizing data. C error: out of memory

最佳答案

基本上,问题出在内存上。 我玩了一下 block 大小+添加了一些过滤,我后来在 block 的代码中添加了这些过滤。 这使我能够将数据帧放入内存中。

关于mysql - 读取 csv 时出现内存错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53960080/

相关文章:

python - 如何在 python 中读取 csv 文件的特定行?

java - 在java中从CSV文件中提取值

php - Doctrine 连接表没有反射(reflect)

python - 如何摆脱 pandas 将 excel 表中的大数字转换为指数?

python - 如何合并两列并按特定顺序重新排列数据?

python - 如何使用pymssql将数据帧写入mssql?

mysql - 使用 VB.NET 2010 远程访问网站的 MySQL 数据库

php - 如何修复 php 7.1.3 和 jpgraph 4.2.6 中的 "Uncaught TypeError: Argument 1 passed to JpGraphException::defaultHandler() "问题?

MySQL - 为什么不索引每个字段?

javascript - Node.js - 读取 CSV 文件无法处理行号 > 500 的情况