我有两个数据集,一个大约 45GB,它包含 1 年的每日交易,第二个是 3.6GB,包含客户 ID 和详细信息。 我想将两者合并到一个公共列上以创建一个单一的数据集,这超出了服务器的内存,因为每个客户可能有多个交易。 我正在使用具有 16 个内核和 64GB RAM 的 Windows 服务器工作, ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
我正在尝试使用Python中的Dask合并许多大型数据集,以避免加载问题。 我想将合并文件另存为.csv
。 这个任务比想象的要难:
我将一个仅包含两个数据集的玩具示例放在一起,然后使用以下代码:
import dask.dataframe as dd
import glob
import os
os.chdir('C:/Users/Me/Working directory')
file_list = glob.glob("*.txt")
dfs = []
for file in file_list:
ddf = dd.read_table(file, sep=';')
dfs.append(ddf)
dd_all = dd.concat(dfs)
如果我使用dd_all.to_csv('*.csv')
,则只打印两个原始数据集。 如果我使用dd_all.to_csv('name.csv')
收到错误消息,指出该文件不存在。 ( FileNotFoundError: [Errno 2] No such file or directory: 'C:\\\\Users\\\\Me\\\\Working directory\\\\name.csv\\\\1.part'
)
我可以使用dd_all.compute()
检查合并的数据集是否已成功创建。
您误解了Dask的工作原理-您所看到的行为符合预期。 为了能够从多个工作线程并行写入,每个工作线程必须能够写入一个单独的文件。 例如,在写入之前,无法知道第一个块的长度。 因此,写入单个文件必须是顺序操作。
因此,默认操作是为每个输入分区写入一个输出文件,这就是您所看到的。 由于Dask可以并行读取这些内容,因此确实提出了一个问题,即为什么要创建一个输出文件。
对于第二种不带“ *”字符的方法,Dask假设您提供的是目录,而不是文件,并试图在此目录中写入两个不存在的文件。
如果您确实想编写一个文件,则可以执行以下操作之一:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.