数据迁移工具
项目描述
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使用类型对之间的小型数据转换函数的网络进行数据迁移。这个网络如下所示
每个节点都是一个容器类型(如pandas.DataFrame或sqlalchemy.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 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 8a6d5595625a1c2de0732ba4448c554b707a8259b477c9b0b7bb94a1f1ca887b |
|
MD5 | 56efff98d9255a6073e62e958545e984 |
|
BLAKE2b-256 | d819b8ae3ef5df6288c42f1c119b2607825469bb4e155f4d49b714743a71af53 |