使用Python进行Apache Beam,构建数据管道2025年1月4日 | 阅读7分钟 引言Apache Beam 是一个开源 SDK,可用于构建分布式或直接的数据管道,这些管道基于批处理或流式集成。您可以为每个管道添加不同的转换。然而,Beam 的真正优势在于它不依赖于任何一个计算引擎,因此具有平台独立性。为了计算您的转换,您需要指定要使用的“运行器”。例如,您可以选择 Spark 引擎或 Cloud Dataflow,而不是默认使用本地计算资源。 通过利用 Beam 的 Python SDK,开发人员可以轻松且可扩展地构建复杂的数据管道。Apache Beam 抽象了执行层,允许用户在不更改管道代码的情况下,在 Google Cloud Dataflow、Apache Flink 和 Apache Spark 等多个执行引擎上运行其管道。关键概念包括 PCollections(数据)、PTransforms(操作)以及用于各种数据源和接收器的 I/O 连接器。Apache Beam 的灵活性使其成为处理大规模数据处理任务的强大工具,提供实时和批处理功能,因此对于现代数据工程和分析至关重要。 安装截至本文撰写时(Apache Beam 2.8.1),仅支持 Python 2.7;Python 3 版本应该很快会发布。Beam 已知会在安装 Python Snappy 时崩溃,但这将在 Beam 2.9 中修复。 基本管道Python 中的基本 Apache Beam 管道涉及三个主要步骤:读取数据、转换数据和写入结果。您首先定义一个 `Pipeline` 对象,然后创建一个 `PCollection` 来保存输入数据。接下来,应用 `PTransforms` 来处理数据,例如过滤、映射或聚合。最后,将转换后的数据写入输出接收器。Apache Beam 的灵活性允许在 Google Cloud Dataflow 或 Apache Flink 等不同后端上运行相同的管道,使其成为批处理和流处理的通用工具。这种方法以可扩展、高效的执行简化了复杂的数据工作流。 示例输出 HELLO WORLD APACHE BEAM DATA PROCESSING PIPELINE EXAMPLE 说明此示例演示了一个基本的数据转换 Apache Beam 管道。如果尚未安装,它将首先安装 Apache Beam 库。随后,定义一个管道,该管道执行三个主要任务:从 `input.txt` 接收文本数据,将每一行转换为大写,并将更改后的行发布到 `output.txt`。管道异步运行,并在配置时等待完成。处理后,Beam 可能会将输出文件分成多个部分(例如,{output.txt-00000-of-00001}),脚本会读取并输出这些部分的内容以确认转换。这说明了 Beam 使用简单但高效的代码来管理复杂数据处理作业的能力。 Beam 中的转换原理在 Apache Beam 中,PCollection 对象表示要处理的数据集合。要开始处理数据,您首先通过使用读取操作将其摄取到 PCollection 中,读取操作本身就是一个转换。此转换从各种数据源读取数据,例如 CSV 文件、数据库或其他存储系统。
遵循这些准则,您可以创建一个数据处理管道,其中每个操作(读取、转换、写入)都表示为应用于 PCollection 的转换。通过这种模块化方法,可以使数据处理工作流灵活且可扩展。 示例这是一个全面的示例,展示了如何使用 Apache Beam 从 CSV 文件读取数据、对其进行转换以及写入结果。此示例涉及的步骤包括读取 CSV 文件、将每一行转换为大写,然后将更新后的行写入输出文件。 首先,创建一个名为 data.csv 的示例 CSV 文件 运行管道 打印输出 输出 输出文件 output.txt-00000-of-00001 将包含 HELLO WORLD APACHE BEAM DATA PROCESSING PIPELINE EXAMPLE 说明该代码演示了一个 Apache Beam 管道,该管道从 CSV 文件读取数据,将每一行转换为大写,并将结果写入输出文件。它首先创建一个示例 `data.csv` 文件。管道以 `ReadFromCSV` 转换开始,将 CSV 数据读取到 `PCollection` 中。然后使用 `beam.Map` 应用 `MapToUppercase` 转换,将每一行转换为大写。转换后的数据使用 `WriteToText` 转换写入 `output.txt`。通过 `pipeline.run()` 执行管道并等待其完成。最后,读取输出文件并打印结果,演示了 Beam 管道的基本步骤:读取、转换和写入数据。 Apache BeamApache Beam 是一个开源软件开发工具包,可通过批处理或流式集成,让您创建各种数据管道并直接或间接运行它们。每个管道都允许您添加不同的转换。然而,Beam 的真正优势在于其平台独立性,这源于它不依赖于任何特定的计算引擎。您需要指定要应用哪个“运行器”来计算转换。默认情况下使用本地计算机资源,您可以选择其他运行器,例如 Cloud Dataflow 或 Spark 引擎。 安装要运行此示例,您需要安装 Apache Beam。如果您使用的是 Python,可以通过 pip 安装。 示例输出 hello: 2 world: 2 beam: 2 说明Apache Beam 脚本对文本数据执行词频统计操作。它首先从 `input.txt` 文件读取行,并使用 `split_words` 函数将每一行拆分为单词。然后将每个单词映射到键值对 `(word, 1)`,接着使用 `beam.CombinePerKey(sum)` 对这些对进行分组并求和。使用 `format_result` 函数将结果格式化为易读的字符串。最后,将格式化的词频统计结果写入 `output.txt`。此管道处理文本、统计单词出现次数并保存结果,如果部署在 Apache Flink 或 Google Cloud Dataflow 等平台上,则可以分布式地处理数据。 结论总之,我们介绍了如何使用 Apache Beam 创建数据管道,重点关注一个基本示例,即从 CSV 文件获取数据、对其进行处理并将其结果发布到输出文件。我们回顾了构建管道的基础知识,包括如何使用 `Read` 进行数据摄取、使用 `Map` 进行转换以及使用 `Write` 进行输出。该过程展示了 Beam 的模块化设计如何促进对大规模数据处理的高效管理。通过执行管道和管理结果,我们展示了 Beam 在执行分布式数据活动方面的适应性和强大功能,其代码既易于理解又可读。 |
Python 在处理时间和复杂性方面效率更高,它可以预测时间序列统计数据、获取实时数据或处理任何其他与时间相关的麻烦。ctime 模块是 Python 中处理时间相关问题的关键模块。本文将……
阅读 3 分钟
Python 是全球最受欢迎的编程语言。它易于学习、用途广泛,并且有许多应用。它是一种面向对象、解释型、通用型编程语言,可用于许多领域:Web 开发、系统自动化、机器学习、深度学习、数据分析……
7 分钟阅读
矩阵范数简介 在线性代数中,矩阵范数是衡量其大小的度量。它是向量范数概念向矩阵的扩展。有多种类型的范数用于矩阵,每种范数都有其自身的应用和属性...
阅读 3 分钟
在 Python 中进行数值计算时,NumPy 库是不可或缺的工具。NumPy 提供了大量的函数和功能,可以有效地处理数组和矩阵。在其众多函数中,numpy.cumprod() 占据着重要地位。此函数对于...
阅读 3 分钟
Python 的 Matplotlib 库是创建生动且信息丰富的可视化数据探索和分析的不可或缺的工具。在这个绘图功能库中,有一个关键命令:matplotlib.pyplot.show(),它是揭示代码中隐藏的视觉启示的关键入口。理解...的重要性
阅读 6 分钟
在 Python 程序中设置路径对于访问文件、模块和目录至关重要。路径可以是相对的,指相对于当前工作目录的目标,也可以是绝对的,描述从根目录到目录的整个路径。Python 的 os 模块提供了与...交互的方法。
阅读 3 分钟
这个 Python 客户端库非常灵活,允许开发人员将 Google 提供的尽可能多的服务集成到他们的 Python 应用程序中。如果您需要访问 Google Drive、Gmail、Google Sheets 或 YouTube 等服务,此客户端提供...
阅读 8 分钟
?Matplotlib 的 yscale() 和 xscale() 函数默认会在使用该程序创建的所有图中生成线性轴。可以相应地使用 pyplot 包将 Y 轴或 X 轴的比例更改为对数。比例转换的类型作为单个值传递...
阅读 3 分钟
引言:在本教程中,我们将学习如何在 Python 中查找列表的中位数。一组元素的**中位数**是将集合分成两部分的**值**,一部分的得分高于平均值,另一部分的得分低于平均值……
5 分钟阅读
简介 Python 是一种高级、解释型、面向对象的语言,具有动态语义。它由 Guido van Rossum 于 1991 年创建,支持多种编程范例,如面向对象、函数式和结构化编程。在深入研究……之前,让我们回顾一下与给定问题相关的基本思想。
阅读 6 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India