用 Python 与 Docker 搭建简洁可靠的数据管道:从零上手 ETL

数据是推动我们作为数据从业者开展工作的资产。没有合适的数据,我们无法完成任务,业务也无法获得竞争优势。因此,获取合适的数据对任何数据专业人士都至关重要,而数据管道正是为此目的而设计的系统。

数据管道是用于将数据从一个来源移动并转换到另一个来源的系统。对于任何依赖数据的企业,这些系统都是整体基础设施的一部分,因为它们保证我们的数据可靠且随时可用。

构建数据管道听起来或许复杂,但只需少量简单工具,就能用几行代码创建可靠的数据管道。本文将探讨如何使用 Python 和 Docker 搭建一个简明的数据管道,便于你在日常数据工作中应用。

我们开始吧。

构建数据管道

在构建数据管道之前,让我们了解 ETL 的概念,它代表 Extract、Transform 和 Load。ETL 是一个过程中,数据管道会执行以下操作:

  • 从各种来源提取数据;
  • 将数据转换为有效格式;
  • 将数据加载到可访问的存储位置。 ETL 是数据管道的标准模式,因此我们构建的内容将遵循这一结构。

借助 Python 和 Docker,我们可以用简洁的设置围绕 ETL 过程构建数据管道。Python 是编排任何数据流活动的有力工具,而 Docker 则可通过容器管理数据管道应用的运行环境。

让我们用 Python 和 Docker 来搭建数据管道。

步骤 1:准备

首先,我们必须确保系统已安装 Python 和 Docker(本文不涉及安装过程)。

在本示例中,我们将使用 Kaggle 的心脏病发作数据集作为数据源来开发我们的 ETL 过程。

在一切就绪后,我们来准备项目结构。总体上,这个简单的数据管道将具有以下骨架:

simple-data-pipeline/
├── app/
│   └── pipeline.py
├── data/
│   └── Medicaldataset.csv
├── Dockerfile
├── requirements.txt
└── docker-compose.yml

主文件夹 simple-data-pipeline 包含:

  • 一个 app 文件夹,内含 pipeline.py 文件。
  • 一个 data 文件夹,内含源数据(Medicaldataset.csv)。
  • requirements.txt 文件(用于环境依赖)。
  • Dockerfile(用于 Docker 配置)。
  • docker-compose.yml 文件(用于定义并运行我们的多容器 Docker 应用)。

我们先填写 requirements.txt 文件,其中包含项目所需的库。

在本例中,我们只使用以下库:

pandas

在下一节里,我们将使用示例数据来设置数据管道。

步骤 2:设置管道

我们将在 Python 的 pipeline.py 文件中编写 ETL 过程。此处我们使用以下代码:

import pandas as pd
import os

input_path = os.path.join("/data", "Medicaldataset.csv")
output_path = os.path.join("/data", "CleanedMedicalData.csv")

def extract_data(path):
    df = pd.read_csv(path)
    print("Data Extraction completed.")
    return df

def transform_data(df):
    df_cleaned = df.dropna()
    df_cleaned.columns = [col.strip().lower().replace(" ", "_") for col in df_cleaned.columns]
    print("Data Transformation completed.")
    return df_cleaned

def load_data(df, output_path):
    df.to_csv(output_path, index=False)
    print("Data Loading completed.")

def run_pipeline():
    df_raw = extract_data(input_path)
    df_cleaned = transform_data(df_raw)
    load_data(df_cleaned, output_path)
    print("Data pipeline completed successfully.")

if __name__ == "__main__":
    run_pipeline()

该管道遵循 ETL 流程:我们加载 CSV 文件,执行诸如删除缺失数据、清理列名等数据转换操作,并将清洗后的数据加载到新的 CSV 文件中。我们将这些步骤封装在一个 run_pipeline 函数中,以执行整个过程。

步骤 3:设置 Dockerfile

在 Python 管道脚本准备好后,我们将填写 Dockerfile,以通过以下代码为 Docker 容器设置配置:

FROM python:3.10-slim

WORKDIR /app
COPY ./app /app
COPY requirements.txt .

RUN pip install --no-cache-dir -r requirements.txt

CMD ["python", "pipeline.py"]

在上述代码中,我们指定容器使用 Python 3.10 作为运行环境。接着,将容器的工作目录设置为 /app,并把本地 app 文件夹中的所有内容复制到容器的 /app 目录。我们也复制 requirements.txt 文件并在容器中执行 pip 安装。最后,指定容器启动时运行的 Python 脚本命令。

在 Dockerfile 就绪后,我们准备 docker-compose.yml 文件以管理整体执行流程:

version: '3.9'

services:
  data-pipeline:
    build: .
    container_name: simple_pipeline_container
    volumes:
      - ./data:/data

上述 YAML 文件在执行时,会使用当前目录下的 Dockerfile 构建 Docker 镜像。我们还将本地 data 文件夹挂载到容器内的 /data 文件夹,使数据集能被脚本访问。

执行管道

在所有文件准备就绪后,我们将在 Docker 中执行数据管道。进入项目根目录,在命令行运行以下命令以构建 Docker 镜像并执行管道:

docker compose up --build

如果运行成功,你将看到类似如下的信息日志:

 ✔ data-pipeline                           Built                                                                                   0.0s 
 ✔ Network simple_docker_pipeline_default  Created                                                                                 0.4s 
 ✔ Container simple_pipeline_container     Created                                                                                 0.4s 
Attaching to simple_pipeline_container
simple_pipeline_container  | Data Extraction completed.
simple_pipeline_container  | Data Transformation completed.
simple_pipeline_container  | Data Loading completed.
simple_pipeline_container  | Data pipeline completed successfully.
simple_pipeline_container exited with code 0

如果一切成功执行,你会在 data 文件夹中看到一个新的 CleanedMedicalData.csv 文件。

恭喜!你刚刚使用 Python 和 Docker 创建了一个简单的数据管道。尝试使用不同的数据源和 ETL 流程,看看你是否能处理更复杂的管道。

结论

理解数据管道对每一位数据从业者都至关重要,因为它们是为工作获取合适数据的关键。本文探讨了如何使用 Python 和 Docker 构建一个简单的数据管道,并学习了如何执行它。

希望这对你有所帮助!

文章标签:

  • 数据管道
  • ETL
  • Python
  • Docker
  • Pandas
  • 数据工程

文章摘要: 用 Python 与 Docker 快速构建并运行 ETL 数据管道,涵盖项目结构、核心代码、容器化配置与执行流程,适合日常数据工作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值