可扩展的数据依赖关系
lazydata的Python项目详细描述
lazydata:可扩展的数据依赖关系
lazydata
是一个极简的库,用于将数据依赖项包含到python项目中。
问题:将所有数据文件保存在git中(例如,通过git lfs)会导致存储库副本膨胀,需要花费很长时间才能提取。保持代码和数据不同步是一个等待发生的灾难。
solution:lazydata
只在git中存储对数据文件的引用,并在需要时按需同步数据文件。
why:代码和数据的语义不同-需要对代码进行版本控制以合并它,而数据只需要保持同步。lazydata
以最小的方式实现了这一点。
优点:
- 只需输入代码即可保持git存储库的干净,同时允许无缝访问任意数量的链接数据文件
- 使用文件哈希和自动版本控制确保数据一致性
- 通过ssh选择自己的远程存储后端:aws s3或(即将推出:)目录
lazydata
主要用于机器学习和数据科学项目。
有关详细信息,请参见this medium post。
开始
在本节中,我们将展示如何在示例项目中使用lazydata
。
安装
使用pip安装(需要python 3.5+):
$ pip install lazydata
添加到您的项目
要启用lazydata
,请在项目根目录下运行:
$ lazydata init
这将初始化lazydata.yml
,它将保存由lazydata管理的文件列表。
跟踪文件
要开始跟踪文件,请在代码中使用track("<path_to_file>")
:
my_script.py
fromlazydataimporttrack# store the file when loading importpandasaspddf=pd.read_csv(track("data/my_big_table.csv"))print("Data shape:"+df.shape)
第一次运行脚本将开始跟踪文件:
$ python my_script.py ## lazydata: Tracking a new file data/my_big_table.csv## Data shape: (10000,100)
文件现在已被跟踪并备份到本地lazydata缓存中的~/.lazydata
,并添加到lazydata.yml:
files:-path:data/my_big_table.csvhash:2C94697198875B6E...usage:my_script.py
如果在不修改数据文件的情况下运行脚本,lazydata将快速检查数据文件是否已更改,并且不会执行任何其他操作。
如果修改数据文件并重新运行脚本,这将使用数据文件的新哈希向yml文件添加另一个条目,即数据文件将自动进行版本控制。如果不想保留以前的版本,只需从yml中删除它们。
你完了!此数据文件现在被跟踪并链接到本地存储库。
共享您的跟踪文件
要从多台计算机访问跟踪的文件,请添加一个远程存储后端,以便上载这些文件。使用s3作为远程存储后端运行:
$ lazydata add-remote s3://mybucket/lazydata
这将配置s3后端,并将其添加到lazydata.yml
中以供将来参考。
现在,您可以像平常一样,git提交并推送my_script.py
和lazydata.yml
文件。
要将存储的数据文件复制到s3,请使用:
$ lazydata push
当您的合作者提取最新版本的git存储库时,他们将像往常一样获取脚本和lazydata.yml
文件。
当您的协作者运行my_script.py
并执行track("my_big_table.csv")
时,将下载数据文件:
$ python my_script.py ## lazydata: Downloading stored file my_big_table.csv ...## Data shape: (10000,100)
要在不运行代码的情况下获取数据文件,还可以使用命令行实用程序:
# download just this file $ lazydata pull my_big_table.csv # download everything used in this script $ lazydata pull my_script.py # download everything stored in the data/ directory and subdirs $ lazydata pull data/ # download the latest version of all data files $ lazydata pull
因为git跟踪lazydata.yml
,所以您可以安全地创建和切换git分支。
数据依赖场景
通过将lazydata.track()
放入代码的不同部分,可以实现多个数据依赖场景:
- 通过在笔记本中使用跟踪功能实现Jupyter笔记本数据相关性
- 通过跟踪保存的文件跟踪数据管道输出
- 通过跟踪
__init__(self)
中的文件来实现类级数据依赖性
- 通过跟踪
__init__.py
中的文件实现模块级数据依赖性
- 通过跟踪
setup.py
中的文件实现包级数据依赖关系
很快就来…
- 检查存储的文件来源和属性
- 切面多个文件i到便携式数据集
- 存储来自数据库和API的数据
- 更多远程存储选项
保持联系
这是一个早期稳定的beta版本。要了解新版本,请订阅我们的new releases mailing list。
贡献
这个图书馆是根据apache-2许可证颁发的。欢迎所有的贡献!