繁体   English   中英

如何快速将大型CSV文件读入Python?

[英]How can I read a large CSV file into Python with speed?

我正在尝试将〜67 gb数据帧(6,000,000个特征乘以2300行)加载到dask中以进行机器学习。 我正在AWS上使用96核心机器,希望将其用于实际机器学习。 但是,Dask在单个线程中加载CSV。 它已经用了整整24小时,还没有加载。

#I tried to display a progress bar, but it is not implemented on dask's load_csv
from dask.diagnostics import ProgressBar
pbar = ProgressBar()
pbar.register()

df = dd.read_csv('../Larger_than_the_average_CSV.csv')

有没有更快的方法可以将其加载到Dask中并使其持久化? 我应该切换到其他技术(Scala上的Spark还是PySpark?)

Dask可能仍在加载它,因为我可以看到top CPU使用率稳定达到100%。

您在问题中显示的代码可能根本不需要时间,因为您实际上并没有加载任何东西,只是设置了工作处方。 这需要多长时间取决于您指定的块大小。

实际加载要考虑两个主要瓶颈:

  • 将数据从光盘放入内存,通过单个光盘接口传输原始数据,
  • 将该数据解析为内存中的内容

如果您在本地磁盘上,则对于前者您无能为力,并且您希望它只是一小部分。

即使默认情况下dask会在多个线程中执行,后者也可能会受到GIL的影响(这就是为什么它可能只显示使用一个线程的原因)。 您最好阅读有关不同调度程序的简要文档,并且即使您位于一台计算机上,也要混合使用线程和进程,并且应该尝试使用分布式调度程序。

最后,您可能根本不想“加载”数据,而是对其进行处理。 是的,您可以根据需要将Dask保留到内存中( dask.persist ,很有趣),但是请不要使用太多的工作程序来加载数据,这样您就可以将其放入客户端进程内存中的Pandas数据帧中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM