0

我必须将数据库中的数据加载到 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 个部门被单独下载和保存。但是,它只是从我的数据库中下载数据,直到内存已满而不保存任何数据。

4

0 回答 0