Minimal Kedro Pipeline

Search for a command to run...

No comments yet. Be the first to comment.
I've slowly adding more and more lua functions into my neovim configuration, and recently I noticed a pattern for a class of functions that reach out to run shell commands that can be abstracted away. https://youtu.be/8m5ipBuopPU Telegraph.nvim Check...

Kedro can have a chatty logger. While this is super nice in production so see everything that happened during a pipeline run. This can be troublesome

In 2021 I changed the way I navigate between tmux sessions big time. Now I can create, kill, switch with ease, and generally keep work separated into
People who are quick to toss team members under a bus are not well trusted or highly thought of and it will lead to some toxic team dynamics. Building Steam While collaborating on any project there are going to be decisions made that aren't necessari...

I create this blog with one person in mind, me. There are others like me This is not completely selfish, as there are likely many others out there that think similarly to me. Everyone comes from different backgrounds and varying levels of experience...

How small can a minimum kedro pipeline ready to package be? I made one within 4 files that you can pip install. It's only a total of 35 lines of python, 8 in setup.py and 27 in mini_kedro_pipeline.py.
I have everything for this post hosted in this gihub repo, you can fork it, clone it, or just follow along.
pip install git+https://github.com/WaylonWalker/mini-kedro-pipeline
This repo represents the minimal amount of structure to build a kedro pipeline that can be shared across projects. Its installable, and drops right into your hooks.py or run.py modules. It is not a runnable pipeline. At this point
I think the config loader requires to have a logging config file.
This is a sharable pipeline that can be used across many different projects.
# hooks.py
import mini_kedro_project as mkp
class ProjectHooks:
@hook_impl
def register_pipelines(self) -> Dict[str, Pipeline]:
"""Register the project's pipeline.
Returns:
A mapping from a pipeline name to a ``Pipeline`` object.
"""
return {"__default__": Pipeline([]), "mkp": mkp.pipeline}
This builds on another post that I made about creating the minimal python package. I am not sure if it should be called a package, it's a module, but what do you call it after you build it and host it on pypi?
Minimal Python PackageWhat does it take to create an installable python package that can be hosted on pypi? What is the minimal python package read more waylonwalker.com |
.
├── .gitignore
├── README.md
├── setup.py
└── my_pipeline.py
This is a very minimal setup.py. This is enough to get you started with a package that you can share across your team. In practice, there is a bit more that you might want to include as your project grows.
from setuptools import setup
setup(
name="MiniKedroPipeline",
version="0.1.0",
py_modules=["mini_kedro_pipeline"],
install_requires=["kedro"],
)
The mini kedro pipeline looks like any set of nodes in your project. Many projects will separate nodes and functions, I prefer to keep them close together. The default recommendation is also to have a create_pipelines function that returns the pipeline.
This pattern creates a singleton, if you were to reference the same pipeline in multiple places within the same running interpreter and modify the one you would run into issues. I don't foresee myself running into this issue, but maybe as more features become available I will change my mind.
"""
An example of a minimal kedro pipeline project
"""
from kedro.pipeline import Pipeline, node
__version__ = "0.1.0"
__author__ = "Waylon S. Walker"
nodes = []
def create_data():
"creates a dictionary of sample data"
return {"beans": range(10)}
nodes.append(node(create_data, None, "raw_data", name="create_raw_data"))
def mult_data(data):
"multiplies each record of each item by 100"
return {item: [i * 100 for i in data[item]] for item in data}
nodes.append(node(mult_data, "raw_data", "mult_data", name="create_mult_data"))
pipeline = Pipeline(nodes)
Go forth and share your pipelines across projects. Let me know, do you share pipelines or catalogs across projects?