首页 > 解决方案 > Apache Beam I/O 转换

问题描述

Apache Beam 文档Authoring I/O Transforms - Overview指出:

在 Beam 中读取和写入数据是一项并行任务,使用 ParDos、GroupByKeys 等通常就足够了。很少,您将需要更专业的 Source 和 Sink 类来实现特定功能。

有人可以提供一个非常基本的例子来说明如何在 Python 中做到这一点吗?

例如,如果我有一个包含 100 个 jpeg 图像的本地文件夹,我将如何:

  1. 使用 ParDos 读取/打开文件。
  2. 在图像上运行一些任意代码(也许将它们转换为灰度)。
  3. 使用 ParDos 将修改后的图像写入不同的本地文件夹。

谢谢,

标签: pythonapache-beamapache-beam-io

解决方案


这是管道示例https://github.com/apache/beam/blob/fc738ab9ac7fdbc8ac561e580b1a557b919437d0/sdks/python/apache_beam/examples/wordcount.py#L37

在您的情况下,首先获取文件的名称,然后一次读取每个文件并写入输出。您可能还希望将文件名推送到 groupby 以使用运行器提供的并行化。因此,总的来说,您的管道可能类似于读取文件名列表 -> 使用 GroupBy Key 将文件名发送到随机播放 -> 在 pardo 中一次获取 1 个文件名 -> 在 pardo 中读取单个文件、处理和写入


推荐阅读