概述¶
Odo 可以在多种格式之间迁移。这些格式包括内存中的结构,如 list、pd.DataFrame 和 np.ndarray,以及 Python 之外的数据,如 CSV/JSON/HDF5 文件、SQL 数据库、远程机器上的数据和 Hadoop 文件系统。
odo 函数¶
odo 接受两个参数,分别是数据传输的源和目标。
>>> from odo import odo
>>> odo(source, target) # load source into target
它能高效地将数据从源迁移到目标。
目标和源可以采用以下形式
| 源 | 目标 | 示例 |
|---|---|---|
| 对象 | 对象 | DataFrame 或 list 的实例 |
| 字符串 | 字符串类型 | '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 的单次调用可能会遍历多个中间格式,并调用多个转换函数。选择这些函数是因为它们速度快,通常比通过中央序列化格式进行转换快得多。
