Example Pipeline¶
An example pipeline comprised of multiple stages (or 'solids').
demos/dagster/pipelines/example_pipeline.py
"""
Example Dagster solids and pipeline from the Dagster tutorial.
"""
import csv
from typing import Any, Dict, List
import requests
from dagster import execute_pipeline, pipeline, solid
from dagster.core.execution.context.compute import SolidExecutionContext
@solid
def download_data(context: SolidExecutionContext) -> List[Dict[str, Any]]:
"""Download dataset."""
response = requests.get("https://docs.dagster.io/assets/cereal.csv")
lines = response.text.split("\n")
cereals = [row for row in csv.DictReader(lines)]
context.log.info(f"Found {len(cereals)} cereals")
return cereals
@solid
def find_max_sugar_cereal(
context: SolidExecutionContext, cereals: List[Dict[str, Any]]
) -> str:
"""Find the product that has the maximum value for sugar content"""
sorted_by_sugar = sorted(cereals, key=lambda cereal: cereal["sugars"])
max_sugar_cereal = sorted_by_sugar[-1]["name"]
context.log.info(f"{max_sugar_cereal} has the greatest amount of sugar.")
return max_sugar_cereal
@pipeline
def cereal_data_pipeline() -> str:
"""Compose the end-to-end cereal data pipeline."""
return find_max_sugar_cereal(download_data())
if __name__ == "__main__":
result = execute_pipeline(cereal_data_pipeline)