为什么Dask执行read_csv().compute()时返回子图而非计算结果?
问题根因及解决方案
从你输出的Dask DataFrame结构可以看到,列名都是实际的样本值(时间戳、股价数值),最常见的错误是没有正确配置表头参数,其次是序列化兼容问题,具体解决方案如下:
- 问题1:CSV无表头,Dask默认将第一行识别为列名
Pandas读文件时容错性更高,可能默认处理了空表头,Dask默认header=0即拿第一行当列名,会导致后续数据读取时类型匹配异常,触发序列化错误。
修复代码:# 手动指定无表头,可通过names参数自定义列名 df = dd.read_csv('AAPL.csv', header=None, names=['trade_time', 'open', 'high', 'low', 'close', 'volume']) df.compute() - 问题2:Dask版本存在序列化bug
低于2021.06.0的旧版本Dask在处理单分区小文件时偶发序列化异常,升级Dask即可修复:pip install --upgrade dask - 问题3:CSV存在特殊分隔符/换行符,Dask默认解析规则不匹配
遇到异常换行、特殊分隔符时,Dask需要手动指定解析参数才能正常读取:
修复代码示例:# 可根据CSV实际格式调整参数,添加on_bad_lines='skip'跳过异常行 df = dd.read_csv('AAPL.csv', sep=',', lineterminator='\n', on_bad_lines='skip') df.compute() - 问题4:Dask分布式集群节点版本不一致
如果你启动了Dask分布式客户端,调度节点和工作节点的Dask、Python版本不一致,会导致计算结果序列化失败,返回Serialize对象,统一所有节点的依赖版本即可修复。
内容的提问来源于stack exchange,提问作者cjm2671
相关产品推荐
相关产品推荐

