概述

Odo 可以在多种格式之间迁移。这些格式包括内存中的结构,如 listpd.DataFramenp.ndarray,以及 Python 之外的数据,如 CSV/JSON/HDF5 文件、SQL 数据库、远程机器上的数据和 Hadoop 文件系统。

odo 函数

odo 接受两个参数,分别是数据传输的源和目标。

>>> from odo import odo
>>> odo(source, target)  # load source into target

它能高效地将数据从源迁移到目标。

目标和源可以采用以下形式

目标 示例
对象 对象 DataFramelist 的实例
字符串 字符串类型 'file.csv''postgresql://hostname::tablename' list、DataFrame

因此,以下行将是 odo 的有效输入

>>> odo(df, list)  # create new list from Pandas DataFrame
>>> odo(df, [])  # append onto existing list
>>> odo(df, 'myfile.json')  # Dump dataframe to line-delimited JSON
>>> odo('myfiles.*.csv', Iterator) # Stream through many CSV files
>>> odo(df, 'postgresql://hostname::tablename')  # Migrate dataframe to Postgres
>>> odo('myfile.*.csv', 'postgresql://hostname::tablename')  # Load CSVs to Postgres
>>> odo('postgresql://hostname::tablename', 'myfile.json') # Dump Postgres to JSON
>>> odo('mongodb://hostname/db::collection', pd.DataFrame) # Dump Mongo to DataFrame

警告

如果 odo(source, target) 中的目标已存在,则它必须是支持原地追加的类型。

>>> odo('myfile.csv', df) # this will raise TypeError because DataFrame is not appendable

网络效应

为了转换任意两种格式的数据,odo.odo 依赖于一个成对转换的网络。我们在下方可视化该网络

odo network of conversions

每个节点代表一种数据格式。每条有向边代表一个在两种格式之间转换数据的功能。对 odo 的单次调用可能会遍历多个边和多个中间格式。红色节点支持超出内存大小的数据。

odo 的单次调用可能会遍历多个中间格式,并调用多个转换函数。选择这些函数是因为它们速度快,通常比通过中央序列化格式进行转换快得多。