Dask - 从 SQL 加载数据帧而不指定 index_col
Dask - load dataframe from SQL without specifying index_col
我正在尝试从 SQL 连接加载 Dask 数据帧。根据 read_sql_table documentation,有必要传入一个 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
不幸的是,在大多数 SQL 实现中,LIMIT/OFFSET 通常不是分区查询的可靠方法。特别是,通常情况下,为了获得偏移量并从查询中获取后面的行,引擎必须首先解析前面的行,因此生成多个分区的工作量会大大增加。在某些情况下,您甚至可能会丢失或重复行。
这就是在 dask sql 实现中需要边界值的原因。
但是,您设置 dask 数据框的方式原则上没有任何问题。如果您能证明您的服务器没有遇到我们预期的问题,那么欢迎您采用这种方法。
我正在尝试从 SQL 连接加载 Dask 数据帧。根据 read_sql_table documentation,有必要传入一个 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
不幸的是,在大多数 SQL 实现中,LIMIT/OFFSET 通常不是分区查询的可靠方法。特别是,通常情况下,为了获得偏移量并从查询中获取后面的行,引擎必须首先解析前面的行,因此生成多个分区的工作量会大大增加。在某些情况下,您甚至可能会丢失或重复行。 这就是在 dask sql 实现中需要边界值的原因。
但是,您设置 dask 数据框的方式原则上没有任何问题。如果您能证明您的服务器没有遇到我们预期的问题,那么欢迎您采用这种方法。