跳转到主要内容

数据迁移工具

项目描述

Build Status Documentation Status

https://binstar.org/blaze/odo/badges/build.svg https://binstar.org/blaze/odo/badges/version.svg

Python中的数据迁移

文档

示例

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

>>> from odo import odo
>>> odo((1, 2, 3), list)
[1, 2, 3]

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

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

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

方法

Odo通过在类型对之间的小数据转换函数网络迁移数据。该网络如下

odo conversions

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

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

这种网络方法也很健壮。当库丢失或发生运行时错误时,odo可以绕过这些漏洞并找到新的路径。

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

from odo 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(添加到现有数据)和resource(URI解析)中。

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

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

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

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

最后,odo还知道哪些容器必须驻留在内存中,哪些不需要。在上述图中,红色节点能够处理大于内存的数据集。两个离核数据集之间的转换仅在红色节点的子图中操作。

许可证

New BSD。请参阅许可证文件

历史

Odo是从Blaze项目中抽离出来的。

项目详情


下载文件

下载适用于您平台的应用程序。如果您不确定选择哪一个,请了解更多关于安装软件包的信息。

源代码发行版

odo-0.5.0.tar.gz (130.0 kB 查看散列)

由以下支持