dask - 为什么 dask 的 read_sql_table 需要一个 index_col 参数?

标签 dask dask-dataframe

我正在尝试使用 dask 中的 read_sql_table,但我遇到了一些与 index_col 参数相关的问题。我的 sql 表没有任何数值,我不知道要给 index_col 参数什么。

我在文档中读到,如果 index_col 是“object”类型,我必须提供“divisions”参数,但我不知道我的 中的值是什么index_col 在阅读表格之前。

我真的很困惑。不知道为什么我在使用 read_sql_table 时必须提供 index_col 而在使用 read_csv 时却不必提供。

最佳答案

我发现在某些情况下,通过 pd.read_sql 及其 chunksize< 将 DataFrame 对象分散到集群中是最简单的处理方法参数:

from dask import bag as db

sql_text = "SELECT ..."
sql_meta = {"column0": "object", "column1": "uint8"}
sql_conn = connect(...)
dfs_futs = map(client.scatter,               # Scatter each object to the cluster
               pd.read_sql(sql_text, 
                           sql_conn, 
                           chunksize=10_000, # Iterate in chunks of 10,000
                           columns=list(sql_meta.keys())))

# Now join our chunks (remotely) into a single frame.
df = db.from_sequence(list(dfs_futs)).to_dataframe(meta=sql_meta)              

这很好,因为您不需要处理任何潜在的驱动程序/包,这些驱动程序/包在分布式节点和/或难以轻松分区数据的情况下管理起来会很麻烦。

只是关于性能的说明,对于我的用例,我们利用数据库的外部表操作将数据假脱机到 CSV,然后使用 pd.read_csv 读取它(它几乎是与上面的处理相同),而 SELECT ... FROM ... WHERE 与 Dask 并行化和分块查询的方式相比,在性能方面可以接受,因为需要付出代价在数据库中执行分块。

关于dask - 为什么 dask 的 read_sql_table 需要一个 index_col 参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62818473/

相关文章:

python - map_partitions 的返回值是多少?

dask - 如何指定dask用于临时文件的目录?

python-3.x - 从 .txt 文件读取到 pandas 数据框,并以换行符作为分隔符

python - 创建和合并多个数据集不适合内存,使用 Dask?

python - Dask groupby 对每列分别给出错误的结果

dask - 如何在 Dask 分布式 SSHCluster 中正确设置工作端口?

python - 使用 dask 合并 csv 文件

python - 为什么无论数据帧大小如何,dask 都需要很长时间来计算

pandas - Dask 从目录递归读取 CSV 文件

Dask:定期更新发布的数据集并从其他客户端拉取数据