dask - 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
解决方案
不幸的是,LIMIT/OFFSET 通常不是在大多数 SQL 实现中划分查询的可靠方法。特别是,通常情况下,为了获得一个偏移量并从查询中获取后面的行,引擎必须首先解析较早的行,因此生成多个分区的工作被放大了很多。在某些情况下,您甚至可能会丢失或重复行。这就是在 dask sql 实现中需要边界值的原因。
但是,您设置 dask 数据框的方式原则上没有任何问题。如果您可以证明您的服务器没有遇到我们预期的问题,那么欢迎您采用这种方法。
推荐阅读
- relational-database - Loopback 4删除关系
- python-3.x - python 3 if..elif 不会打印
- c++ - C++:从 txt 文件读取输出问题
- php - 在 woocommerce 中按自定义库存状态过滤
- c# - C# 如何在 String.Contains 方法中添加更多标点符号?
- c# - C#/SQL Server:如何在允许另一个用户无缝访问数据的同时重复锁定/截断/更新表
- mysql - 使用 Redis 在多个设备上同步不同的数据库
- python - 如何搜索重复项,然后像 excel(在这种情况下为工作表)一样在数据框中突出显示它们?
- node.js - 如何在 Node-Express-Mongoose 中设置动态选择控件的默认选项?
- c# - 没有路由与为 HTTP POST 提供的值匹配