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



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

我已经做了什么

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

我还没有开始真正分析数据。在重新整理数据的过程中,我弄得足够乱了。

当前问题

我有困难的时间在连接列从SQL数据库到任务/casta数据框架。事实上,我不确定这是否可行。

的替代方法

看来我在为这项任务选择最好的工具时犯了一些错误。卡斯特罗可能还不够成熟,我认为这是问题的一部分。此外,选择SQLAlchemy而不是peewee可能会更好,因为pandas使用SQLAlchemy,而peewee没有使用SQLAlchemy。

Blaze + HDF5可能是dask + casta的良好替代品,主要是因为HDF5比casta更稳定/成熟/完整,而Blaze在数据存储方面不那么固执己见。如。它可以简化SQL数据库与主数据集的连接。

另一方面,我熟悉熊猫和任务暴露"相同"的API。通过dask,我还获得了并行性。

TL;博士

我有一个大于内存数据集+ sqlite DB,我需要加入到主数据集。我不确定是否使用dask + casta(不知道dask.dataframe的其他相关数据存储),并使用SQLAlchemy一次将部分SQL DB加载到pandas数据框架中。我看到的最好的选择是切换到火焰+ HDF5。在这种情况下你有什么建议?

欢迎任何其他选择/意见。

以下几点你是正确的:

  • 蓖麻是实验性的,未成熟的。

如果你想要更成熟的东西,你可以考虑HDF5或CSV(如果你对缓慢的性能很好)。Dask。Dataframe支持所有这些格式,就像pandas一样。

  • 不清楚如何在两种不同的格式之间连接,如dask。数据框架和SQL。

可能你想用其中之一。如果您对将SQL数据读入任务感兴趣。数据框架可能会引发问题。在一般情况下,这并不难添加。

最新更新