”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > ETL 管道的最佳 Python 库:初学者开发人员指南

ETL 管道的最佳 Python 库:初学者开发人员指南

发布于2024-11-03
浏览:204

Best Python Libraries for ETL Pipelines: A Beginners Developer

构建 ETL 管道感觉很像成为被选中的人 – 您将数据从 A 点移动到 B 点,将其转换为有用的东西,并且确保一切顺利进行。 Python 通过大量库为您提供支持,让您的工作变得更轻松 – 有点像有原力在您身边?️。在本指南中,我们将介绍一些最好的 Python 库,以帮助您赢得 ETL 战争。 ?

1. 提取:从源中提取数据

在数据提取方面,您需要合适的工具从不同来源(数据库、API、文件)提取数据。这就是乐趣的开始(提示欧比旺的声音)。以下是获取所需数据的首选库。

SQLAlchemy

从数据库中提取数据时,SQLAlchemy 是您值得信赖的光剑。它功能强大,可以毫不费力地处理多种数据库类型。

  • 优点
    • 支持多种数据库(PostgreSQL、MySQL、SQLite等)
    • 您可以轻松地在数据库之间切换
  • 例子
  from sqlalchemy import create_engine

  engine = create_engine('postgresql://user:password@localhost/dbname')
  connection = engine.connect()
  result = connection.execute("SELECT * FROM jedi_order")

熊猫

在处理 CSV、Excel、JSON 甚至 SQL 数据时,Pandas 是您的瑞士军刀?️。它快速且易于使用,非常适合从文件中提取数据。

  • 优点
    • 可以用一行代码加载各种文件格式的数据
    • 内存数据的出色性能
  • 例子
  import pandas as pd

  data = pd.read_csv('rebels_data.csv')

请求

对于处理 REST API,请求就像 R2-D2 – 它可靠、简单,并且无论如何都会为您提供所需的数据。

  • 优点
    • 使 HTTP 请求变得超级简单
    • 处理 API 身份验证、标头等
  • 例子
  import requests

  response = requests.get('https://api.example.com/data')
  data = response.json()

2. 转换:塑造数据

现在您已经提取了数据,是时候它转换成可用的东西。这个阶段就像是把原始秘银锻造成铠甲?️。让我们深入研究一些很棒的转换库。

熊猫

Pandas 在转换数据方面再次派上用场。无论是清洁、过滤还是聚合,它都会像隐形斗篷一样为您遮盖。

  • 优点
    • 大量用于数据操作的内置函数
    • 内存中转换的理想选择
  • 例子
  # Clean data by removing NaN values and filtering rows
  data_cleaned = data.dropna().query('age > 18')

达斯克

拥有大量数据集,甚至可以让死星看起来很小? Dask 允许您使用并行处理来处理大于内存的数据,而无需重写 Pandas 代码。 ?

  • 优点
    • 扩展以处理大型数据集
    • 分布式计算,但具有熟悉的类似 Pandas 的语法
  • 例子
  import dask.dataframe as dd

  df = dd.read_csv('huge_data.csv')
  result = df[df.age > 18].compute()

PySpark

对于大数据的绝地级转换,PySpark 就是最好的选择。它是分布式数据处理领域的卢克·天行者。 ?‍♂️

  • 优点
    • 大型数据集上闪电般的数据转换
    • 非常适合在大数据生态系统(Hadoop、Spark)中工作
  • 例子
  from pyspark.sql import SparkSession

  spark = SparkSession.builder.appName("ETL").getOrCreate()
  df = spark.read.csv('galaxy_data.csv', header=True, inferSchema=True)
  df_filtered = df.filter(df.age > 18)

3. 加载:将数据放在它所属的位置

最后,您已将数据转换为可用的内容。现在是时候将其加载到最终目的地了。无论是数据仓库、S3 存储桶还是数据库,都可以将其视为将一枚戒指交付给魔多?️ – 有了正确的工具,整个旅程就会变得更加轻松。

SQLAlchemy

SQLAlchemy 使将数据加载回数据库变得简单。有了它,您可以轻松地将数据插入关系数据库。

  • 优点
    • 适用于多个数据库
    • 支持批量插入
  • 例子
  data.to_sql('jedi_council', engine, index=False, if_exists='replace')

惊魂2

对于 PostgreSQL 数据库,psycopg2 是您最好的伴侣。它快速、高效,并且使复杂的 SQL 任务变得轻而易举。

  • 优点
    • 对 PostgreSQL 的本机支持
    • 支持交易
  • 例子
  import psycopg2

  conn = psycopg2.connect(dbname="star_wars", user="user", password="force123")
  cur = conn.cursor()
  cur.execute("INSERT INTO jedis (name, age) VALUES (%s, %s)", ('Luke', 30))
  conn.commit()

Boto3

如果您使用 S3 等 AWS 服务,Boto3 是将数据上传到云的首选工具。你会感觉就像甘道夫挥舞着它。 ☁️

  • 优点
    • 与 AWS 服务完全集成
    • 轻松从 S3 上传/下载
  • 例子
  import boto3

  s3 = boto3.client('s3')
  s3.upload_file('local_file.csv', 'mybucket', 'file.csv')

Google 云存储 (GCS) 客户端

对于使用 Google Cloud 的开发人员,GCS 客户端将帮助您轻松将数据加载到 Google Cloud Storage,就像 Boto3 与 AWS 一样。

  • 优点
    • 全面支持 Google Cloud
  • 例子
  from google.cloud import storage

  client = storage.Client()
  bucket = client.get_bucket('my_bucket')
  blob = bucket.blob('data.csv')
  blob.upload_from_filename('local_file.csv')

4. 编排:管理您的 ETL 管道

现在,如果没有一些编排,任何 ETL 管道都是不完整的。将此视为引导所有移动部件的力量⚙️ – 安排任务、监控并在出现问题时重试。

阿帕奇气流

如果您正在处理任何复杂的事情,Apache Airflow 就是您用于任务编排的 Yoda。有了它,您可以创建、安排和监控工作流程,确保所有 ETL 作业正常运行。

  • 优点
    • 强大的调度和任务管理
    • 用于跟踪工作流程的可视化界面
  • 例子
  from airflow import DAG
  from airflow.operators.python_operator import PythonOperator

  def extract_data():
      # Extraction logic
      pass

  dag = DAG('my_etl_pipeline', start_date=datetime(2023, 1, 1))
  task = PythonOperator(task_id='extract_task', python_callable=extract_data, dag=dag)

总结

构建 ETL 管道不必感觉像是在与 Darth Vader ⚔️ 作战。使用正确的工具,您可以自动化整个流程、高效转换数据并将其加载到最终目的地。无论您是处理小型数据集还是在大型分布式系统上工作,这些 Python 库都将帮助您构建与 One Ring 一样强大的 ETL 管道(但邪恶程度要低得多)。

愿 ETL 力量与你同在。

版本声明 本文转载于:https://dev.to/nicobistolfi/best-python-libraries-for-etl-pipelines-a-beginners-developers-guide-1ia1?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • Java是否允许多种返回类型:仔细研究通用方法?
    Java是否允许多种返回类型:仔细研究通用方法?
    在Java中的多个返回类型:一种误解类型:在Java编程中揭示,在Java编程中,Peculiar方法签名可能会出现,可能会出现,使开发人员陷入困境,使开发人员陷入困境。 getResult(string s); ,其中foo是自定义类。该方法声明似乎拥有两种返回类型:列表和E。但这确实是如此吗...
    编程 发布于2025-07-17
  • 如何简化PHP中的JSON解析以获取多维阵列?
    如何简化PHP中的JSON解析以获取多维阵列?
    php 试图在PHP中解析JSON数据的JSON可能具有挑战性,尤其是在处理多维数组时。 To simplify the process, it's recommended to parse the JSON as an array rather than an object.To do...
    编程 发布于2025-07-17
  • 如何从PHP中的数组中提取随机元素?
    如何从PHP中的数组中提取随机元素?
    从阵列中的随机选择,可以轻松从数组中获取随机项目。考虑以下数组:; 从此数组中检索一个随机项目,利用array_rand( array_rand()函数从数组返回一个随机键。通过将$项目数组索引使用此键,我们可以从数组中访问一个随机元素。这种方法为选择随机项目提供了一种直接且可靠的方法。
    编程 发布于2025-07-17
  • 如何在鼠标单击时编程选择DIV中的所有文本?
    如何在鼠标单击时编程选择DIV中的所有文本?
    在鼠标上选择div文本单击带有文本内容,用户如何使用单个鼠标单击单击div中的整个文本?这允许用户轻松拖放所选的文本或直接复制它。 在单个鼠标上单击的div元素中选择文本,您可以使用以下Javascript函数: function selecttext(canduterid){ if(do...
    编程 发布于2025-07-17
  • 如何处理PHP文件系统功能中的UTF-8文件名?
    如何处理PHP文件系统功能中的UTF-8文件名?
    在PHP的Filesystem functions中处理UTF-8 FileNames 在使用PHP的MKDIR函数中含有UTF-8字符的文件很多flusf-8字符时,您可能会在Windows Explorer中遇到comploreer grounder grounder grounder gro...
    编程 发布于2025-07-17
  • 对象拟合:IE和Edge中的封面失败,如何修复?
    对象拟合:IE和Edge中的封面失败,如何修复?
    To resolve this issue, we employ a clever CSS solution that solves the problem:position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%)...
    编程 发布于2025-07-17
  • Spark DataFrame添加常量列的妙招
    Spark DataFrame添加常量列的妙招
    在Spark Dataframe ,将常数列添加到Spark DataFrame,该列具有适用于所有行的任意值的Spark DataFrame,可以通过多种方式实现。使用文字值(SPARK 1.3)在尝试提供直接值时,用于此问题时,旨在为此目的的column方法可能会导致错误。 df.withCo...
    编程 发布于2025-07-17
  • 如何实时捕获和流媒体以进行聊天机器人命令执行?
    如何实时捕获和流媒体以进行聊天机器人命令执行?
    在开发能够执行命令的chatbots的领域中,实时从命令执行实时捕获Stdout,一个常见的需求是能够检索和显示标准输出(stdout)在cath cath cant cant cant cant cant cant cant cant interfaces in Chate cant inter...
    编程 发布于2025-07-17
  • 为什么我会收到MySQL错误#1089:错误的前缀密钥?
    为什么我会收到MySQL错误#1089:错误的前缀密钥?
    mySQL错误#1089:错误的前缀键错误descript [#1089-不正确的前缀键在尝试在表中创建一个prefix键时会出现。前缀键旨在索引字符串列的特定前缀长度长度,可以更快地搜索这些前缀。了解prefix keys `这将在整个Movie_ID列上创建标准主键。主密钥对于唯一识别...
    编程 发布于2025-07-17
  • MySQL中如何高效地根据两个条件INSERT或UPDATE行?
    MySQL中如何高效地根据两个条件INSERT或UPDATE行?
    在两个条件下插入或更新或更新 solution:的答案在于mysql的插入中...在重复键更新语法上。如果不存在匹配行或更新现有行,则此功能强大的功能可以通过插入新行来进行有效的数据操作。如果违反了唯一的密钥约束。实现所需的行为,该表必须具有唯一的键定义(在这种情况下为'名称'...
    编程 发布于2025-07-17
  • Python读取CSV文件UnicodeDecodeError终极解决方法
    Python读取CSV文件UnicodeDecodeError终极解决方法
    在试图使用已内置的CSV模块读取Python中时,CSV文件中的Unicode Decode Decode Decode Decode decode Error读取,您可能会遇到错误的错误:无法解码字节 在位置2-3中:截断\ uxxxxxxxx逃脱当CSV文件包含特殊字符或Unicode的路径逃...
    编程 发布于2025-07-17
  • 在程序退出之前,我需要在C ++中明确删除堆的堆分配吗?
    在程序退出之前,我需要在C ++中明确删除堆的堆分配吗?
    在C中的显式删除 在C中的动态内存分配时,开发人员通常会想知道是否有必要在heap-procal extrable exit exit上进行手动调用“ delete”操作员,但开发人员通常会想知道是否需要手动调用“ delete”操作员。本文深入研究了这个主题。 在C主函数中,使用了动态分配变量(H...
    编程 发布于2025-07-17
  • 如何将多种用户类型(学生,老师和管理员)重定向到Firebase应用中的各自活动?
    如何将多种用户类型(学生,老师和管理员)重定向到Firebase应用中的各自活动?
    Red: How to Redirect Multiple User Types to Respective ActivitiesUnderstanding the ProblemIn a Firebase-based voting app with three distinct user type...
    编程 发布于2025-07-17
  • 如何使用FormData()处理多个文件上传?
    如何使用FormData()处理多个文件上传?
    )处理多个文件输入时,通常需要处理多个文件上传时,通常是必要的。 The fd.append("fileToUpload[]", files[x]); method can be used for this purpose, allowing you to send multi...
    编程 发布于2025-07-17
  • 为什么我的CSS背景图像出现?
    为什么我的CSS背景图像出现?
    故障排除:CSS背景图像未出现 ,您的背景图像尽管遵循教程说明,但您的背景图像仍未加载。图像和样式表位于相同的目录中,但背景仍然是空白的白色帆布。而不是不弃用的,您已经使用了CSS样式: bockent {背景:封闭图像文件名:背景图:url(nickcage.jpg); 如果您的html,css...
    编程 发布于2025-07-17

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3