选择一个框架进行大于python的内存数据分析

Nag*_*i45 5 python hdf5 blaze dask

我正在解决一个大于内存的数据集的问题。原始数据集是一个.csv文件。列之一是来自musicbrainz服务的曲目ID。

我已经做了什么

我用dask读取了.csv文件,并将其转换为磁盘上的castra格式以获得更高的性能。我还查询了musicbrainz API,并使用peewee填充了一个sqlite数据库,并得到了一些相关结果。我选择使用数据库而不是另一个dask.dataframe,因为该过程花了几天的时间,而且我不想在发生任何故障时丢失数据。

我还没有真正开始分析数据。重新整理数据时,我设法弄得一团糟。

当前的问题

我很难将SQL DB的列连接到dask / castra数据框。实际上,我不确定这是否可行。

替代方法

在为任务选择最佳工具时,我似乎犯了一些错误。Castra可能还不够成熟,我认为这是问题的一部分。另外,最好选择SQLAlchemy来支持peewee,因为pandas和peewee都不使用它。

Blaze + HDF5可能是dask + castra的不错选择,主要是因为HDF5比castra更稳定/更成熟/更完整,并且blaze在数据存储方面的看法较少。例如,它可以简化将SQL DB连接到主数据集中的过程。

另一方面,我对大熊猫很熟悉,还可以公开“相同”的API。借助dask,我还将获得并行性。

TL; DR

我要比内存数据集+ sqlite DB大,需要加入主数据集。我不确定是否要使用dask + castra(不知道dask.dataframe的其他相关数据存储),并使用SQLAlchemy通过pandas一次将部分SQL DB加载到数据框中。我认为最好的替代方法是改用blaze + HDF5。在这种情况下,您有什么建议?

任何其他选项/意见都值得欢迎。我希望这对于SO来说足够具体。

MRo*_*lin 1

您在以下几点上是正确的:

  • Castra 是实验性的且不成熟的。

如果您想要更成熟的东西,您可以考虑 HDF5 或 CSV(如果您可以接受缓慢的性能)。Dask.dataframe 支持所有这些格式,就像 pandas 一样。

  • 目前尚不清楚如何在 dask.dataframe 和 SQL 等两种不同格式之间进行连接。

也许您想使用其中之一。如果您有兴趣将 SQL 数据读入 dask.dataframe,您可以提出问题。在常见情况下添加这一点并不难。