最近接到一个需求是把近100G的CSV数据(多个目录的多个文件,单文件最大1G,每个目录下是同一类目的数据,类目数据需要做排重处理)导入Mysql
环境:桌面笔记本电脑,i5+8G(约2G可用内存)+128GSSD+1T+Win10
实现过程记个流水账
最开始是想用PHP或python,一行一行读取,然后再写入,计算了一下需要时间太长了,最终选择了python+pandas方案
其中遇到的坑:
1、dtype
直接用pandas.read_csv的时候遇到大文件内存溢出程序终止,改成分片读取解决
import pandas as pd
df = pd.read_csv('path/to/file')
得到
C:/path/to/python.exe E:/data/pd.py
sys:1: DtypeWarning: Columns (3) have mixed types. Specify dtype option on import or set low_memory=False.
解决:
1、加载前设置dtype或2、设置low_memory=False
df = pd.read_csv('path/to/file',dtype={"cat_id":int, "cat_name":object})
但cat_id列必须全部是int类型的
所以选用了第2种方法