问题描述
目的是查找大型CSV文件中的总行数。我现在正在使用Python dask进行查找,但是由于文件大小约为45G,因此需要花费一些时间。带有cat
的Unix wc -l
似乎表现更好。
所以问题是-dask / pandas read_csv是否有任何调整,以使其更快地找到总行数?
解决方法
您可以在python代码中尝试subprocess
:
fileName = "file.csv"
cmd = 'wc -l {0}'.format(fileName)
output = subprocess.call(cmd)
,
Dask数据框将花费其90%的时间将文本解析为各种数值类型,例如int,float等。您不需要任何此类内容,因此最好不要制作类似数据框的东西。
您可以使用dask.bag,它将更快/更简单
dask.bag.read_text("...").count().compute()
但是实际上wc -l
的速度将与其他任何东西一样快。您应该完全受磁盘速度的约束,而不是受计算能力的约束。 Dask帮助您利用CPU上的多个内核,但是在这种情况下,这些并不是瓶颈,因此wc
不是正确的工具。