我正在解决数据集大于内存的问题。 原始数据集是.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更稳定/成熟/完整,而且火焰对数据存储的看法较少。例如。 它可以简化SQL DB与主数据集的连接。
另一方面,我熟悉大熊猫和dask暴露了同样的"同样的" API。有了dask,我也获得了并行性。
我有一个比内存数据集+ sqlite DB更大的东西,我需要加入主数据集。 我怀疑是否使用dask + castra(不知道dask.dataframe的其他相关数据存储),并使用SQLAlchemy一次将部分SQL DB加载到带有pandas的数据帧中。我看到的最好的替代方案是切换到火焰+ HDF5。 在这种情况下你会建议什么?
欢迎任何其他选择/意见。 我希望这对SO来说足够具体。
答案 0 :(得分:1)
以下几点你是对的:
如果你想要更成熟的东西,你可以考虑使用HDF5或CSV(如果你的性能很差)。 Dask.dataframe支持所有这些格式,就像pandas一样。
可能你想要使用其中一个。如果您对将数据读入dask.dataframe感兴趣,可以raise an issue。在常见情况下,这并不难添加。