Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dask-从SQL加载数据帧而不指定索引列_Dask_Dask Distributed_Dask Delayed_Dask Dataframe - Fatal编程技术网

Dask-从SQL加载数据帧而不指定索引列

Dask-从SQL加载数据帧而不指定索引列,dask,dask-distributed,dask-delayed,dask-dataframe,Dask,Dask Distributed,Dask Delayed,Dask Dataframe,我正在尝试从SQL连接加载Dask数据帧。根据,必须传入一个索引列。如果可能没有好的列作为索引,我该怎么办 这是合适的替代品吗 # 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 * F

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

这是合适的替代品吗

# 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实现中,限制/偏移量通常不是划分查询的可靠方法。特别是,为了获得偏移量并从查询中获取后续行,引擎必须首先解析早期行,因此生成大量分区的工作会被放大很多。在某些情况下,您甚至可能会丢失或重复行。 这就是在dask sql实现中需要边界值的原因


然而,您设置dask数据帧的方式在原则上没有任何错误。如果您可以证明您的服务器没有出现我们预期的问题,那么欢迎您采用这种方法

啊,我明白了,那么有没有另一种推荐的/更可靠的方法来实现这一点而不使用限制/偏移呢?谢谢认真地使用索引:)从Dask的角度来看,从可靠的查询构造和执行的角度来看,从DB引擎的角度来看,使用索引是一条路。当然,您可以指定一个在数据库中没有索引的索引,但性能会受到影响。(我的意思是,每个分区都是由我看到的
挑选的,谢谢你的帮助!接下来的问题是,Dask的read_sql_表为每个分区设置了单独的连接,难道不可能在Dask工作人员查询表时将新记录插入表中,从而导致表的视图不一致吗e?我认为没有任何方法可以指定“按照时间X的方式对数据执行此查询”,是的,确实有些分区可能包含新数据,而其他分区可能不包含新数据,但至少我们保证分区中的每一行确实满足其边界条件。