python - 用python选择大于内存数据分析的框架

标签 python hdf5 blaze dask

我正在解决一个大于内存的数据集问题。 原始数据集是一个 .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 数据库与主数据集的连接。

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

长话短说

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

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

最佳答案

你在以下几点是正确的:

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

如果您想要更成熟的东西,您可以考虑 HDF5 或 CSV(如果您不介意性能较慢)。 Dask.dataframe 以与 pandas 相同的方式支持所有这些格式。

  • 尚不清楚如何连接两种不同的格式,例如 dask.dataframe 和 SQL。

可能您想使用一个或另一个。如果您有兴趣将 SQL 数据读入 dask.dataframe,您可以 raise an issue .这在常见情况下并不难添加。

关于python - 用python选择大于内存数据分析的框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33129839/

相关文章:

python - 在python中快速读取HDF 5文件?

python - 使用 Blaze 附加 bcolz 列

python - 不支持使用 Blaze Data(engine) 的字符串编码

python - PyQt widget可以存储在局部变量中吗?

python - 属性错误: 'DataFrame' object has no attribute 'ravel'

python - 用牛顿法求立方根

python - 如何使用 h5py 从 HDF5 数据集中读取字符串

python - 如何在 h5py 中使用 HDF5 尺寸刻度

python - 构建 Blaze 需要什么 Clang++?

python - 根据每个元组内的值对元组列表进行分区