7

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

我已经做了什么

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

我还没有开始真正分析数据。在重新排列数据的过程中,我设法弄得一团糟。

当前的问题

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

替代方法

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

Blaze + HDF5 可能作为 dask + castra 的良好替代品,主要是因为 HDF5 比 castra 更稳定/成熟/完整,并且 blaze 在数据存储方面不太固执己见。例如,它可以简化 SQL DB 到主数据集的连接。

另一方面,我熟悉 pandas 并且 dask 公开了“相同”的 API。使用 dask 我也获得了并行性。

TL;博士

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

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

4

1 回答 1

1

你在以下几点是正确的:

  • 卡斯特拉是实验性的和不成熟的。

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

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

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

于 2015-10-14T16:25:23.253 回答