我必须将数据库中的数据加载到 dask 数据框中。我正在使用dd.read_sql_table
它。我需要传递一个元数据才能使一些带有 nan 列的 int 使用该pd.Int64
数据类型。由于索引列是基于字符串的(例如“-7874571842864554321-1403311221-11”),我需要设置分区。但我没有这样做。到目前为止我尝试了什么:
divisions = [
'9000000000000000000-0000000000-0',
'8000000000000000000-0000000000-0',
'7000000000000000000-0000000000-0',
'6000000000000000000-0000000000-0',
'5000000000000000000-0000000000-0',
'4000000000000000000-0000000000-0',
'3000000000000000000-0000000000-0',
'2000000000000000000-0000000000-0',
'1000000000000000000-0000000000-0',
'0000000000000000000-0000000000-0',
'-1000000000000000000-0000000000-0',
'-2000000000000000000-0000000000-0',
'-3000000000000000000-0000000000-0',
'-4000000000000000000-0000000000-0',
'-5000000000000000000-0000000000-0',
'-6000000000000000000-0000000000-0',
'-7000000000000000000-0000000000-0',
'-8000000000000000000-0000000000-0',
'-9000000000000000000-0000000000-0'
]
with ProgressBar():
df = dd.read_sql_table(tablename, DB_CONNECT_STRING, index_col='id', meta=meta,
divisions=divisions)
df.to_parquet(LOCAL_BUFFER_PATH, engine='pyarrow')
如果数据只是分成 n 个部分就可以了,因为无论如何索引都没有说任何有意义的东西。但是现在这段代码发生的事情是它似乎只是使用了一个分区,这会溢出我的内存。我期望的是 19 个部门被单独下载和保存。但是,它只是从我的数据库中下载数据,直到内存已满而不保存任何数据。