首页 > 解决方案 > Dask - 从 SQL 加载数据帧而不指定 index_col

问题描述

我正在尝试从 SQL 连接加载 Dask 数据帧。根据read_sql_table 文档,有必要传入 index_col。如果可能没有好的列作为索引,我该怎么办?

这可能是一个合适的替代品吗?

# Break SQL Query into chunks
chunks = []
num_chunks = math.ceil(num_records / chunk_size)

# Run query for each chunk on Dask workers
for i in range(num_chunks):
    query = 'SELECT * FROM ' + table + ' LIMIT ' + str(i * chunk_size) + ',' + str(chunk_size)
    chunk = dask.delayed(pd.read_sql)(query, sql_uri)
    chunks.append(chunk)

# Aggregate chunks
df = dd.from_delayed(chunks)
dfs[table] = df

标签: daskdask-distributeddask-delayeddask-dataframe

解决方案


不幸的是,LIMIT/OFFSET 通常不是在大多数 SQL 实现中划分查询的可靠方法。特别是,通常情况下,为了获得一个偏移量并从查询中获取后面的行,引擎必须首先解析较早的行,因此生成多个分区的工作被放大了很多。在某些情况下,您甚至可能会丢失或重复行。这就是在 dask sql 实现中需要边界值的原因。

但是,您设置 dask 数据框的方式原则上没有任何问题。如果您可以证明您的服务器没有遇到我们预期的问题,那么欢迎您采用这种方法。


推荐阅读