数据是推动我们作为数据从业者开展工作的资产。没有合适的数据,我们无法完成任务,业务也无法获得竞争优势。因此,获取合适的数据对任何数据专业人士都至关重要,而数据管道正是为此目的而设计的系统。
数据管道是用于将数据从一个来源移动并转换到另一个来源的系统。对于任何依赖数据的企业,这些系统都是整体基础设施的一部分,因为它们保证我们的数据可靠且随时可用。
构建数据管道听起来或许复杂,但只需少量简单工具,就能用几行代码创建可靠的数据管道。本文将探讨如何使用 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 数据管道,涵盖项目结构、核心代码、容器化配置与执行流程,适合日常数据工作。