跳转到主要内容

数据迁移工具

项目描述

Build Status Documentation Status

Python中的数据迁移

文档

示例

Into在不同的容器之间迁移数据

>>> from into import into

>>> into(list, (1, 2, 3))
[1, 2, 3]

它操作于小型的内存容器(如上所示)和大型、离核容器(如下所示)

>>> into('postgresql://user:pass@host::my-table', 'myfile.hdf5::/data')
Table('my-table', MetaData(bind=Engine(postgresql://user:****@host)), ...)

Into利用现有的Python生态系统。上面的示例使用sqlalchemy进行SQL交互,以及h5py进行HDF5交互。

方法

Into使用类型对之间的小型数据转换函数的网络进行数据迁移。这个网络如下所示

into conversions

每个节点都是一个容器类型(如pandas.DataFramesqlalchemy.Table),每条有向边都是一个将一个容器转换或附加到另一个容器的函数。我们对这些函数/边进行相对成本的注释。

这种网络方法允许into在任意两种类型之间选择最短路径(感谢networkx)。出于性能考虑,这些函数通常会利用非Pythonic系统,如NumPy数组或本地的CSV->SQL加载函数。Into不依赖于Python迭代器。

这种网络方法也具有鲁棒性。当库缺失或发生运行时错误时,into可以绕过这些漏洞并找到新的路径。

这种网络方法也是可扩展的。编写小型函数并将其注册到整体图中很容易。在以下示例中,我们展示了如何将pandas.DataFrame转换为numpy.ndarray

from into import convert

@convert.register(np.ndarray, pd.DataFrame, cost=1.0)
def dataframe_to_numpy(df, **kwargs):
    return df.to_records(index=False)

我们使用目标类型、源类型以及相对成本装饰 convert 函数。这种装饰建立了一个合同,即底层函数必须满足的条件,在这种情况下是与快速 DataFrame.to_records 方法相匹配。类似的功能还包括用于向现有数据添加数据的 append 以及用于 URI 解析的 resource

  • convert:将数据集转换为新的容器

  • append:将数据集添加到现有容器中

  • resource:给定一个 URI,找到适当的数据资源

  • into:根据输入调用上述功能之一。例如,into(list, (1, 2, 3)) => convert(list, (1, 2, 3)),而 L = []; into(L, (1, 2, 3)) => append(L, (1, 2, 3))

最后,into 还知道哪些容器必须驻留在内存中,哪些不需要。在上述图中,红色节点 对大于内存的数据集是健壮的。两个脱核数据集之间的转换仅在红色节点的子图中操作。

许可证

新 BSD 许可。请参阅许可文件

历史

Into 是从 Blaze 项目中提取出来的。

项目详情


下载文件

下载您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源分布

into-0.2.2.tar.gz (85.0 kB 查看散列)

上传时间

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面