地图

Pydoc Pydoc




对集合中的每个元素应用简单的 1 对 1 映射函数。

示例

在以下示例中,我们创建一个包含产品的 PCollection,其中包含其图标、名称和持续时间。然后,我们以多种方式应用 Map 来转换 PCollection 中的每个元素。

Map 接受一个函数,该函数为 PCollection 中的每个输入元素返回单个元素。

示例 1:使用预定义函数映射

我们使用函数 str.strip,它接受一个 str 元素并输出一个 str。它会剥离输入元素的空白,包括换行符和制表符。

示例 2:使用函数映射

我们定义一个函数 strip_header_and_newline,它会从每个元素中剥离任何 '#'' ''\n' 字符。

示例 3:使用 lambda 函数映射

我们还可以使用 lambda 函数来简化**示例 2**。

示例 4:使用多个参数映射

您可以将具有多个参数的函数传递给 Map。它们将作为附加位置参数或关键字参数传递给函数。

在此示例中,strip 接受 textchars 作为参数。

示例 5:针对键值对使用 MapTuple

如果您的 PCollection 包含 (key, value) 对,您可以使用 MapTuple 将它们解包到不同的函数参数中。

示例 6:使用侧输入作为单例进行映射

如果 PCollection 只有一个值,例如来自其他计算的平均值,则将 PCollection 作为单例传递将访问该值。

在此示例中,我们将 PCollection 的值 '# \n' 作为单例传递。然后,我们将该值用作 str.strip 方法的字符。

示例 7:使用侧输入作为迭代器进行映射

如果 PCollection 有多个值,则将 PCollection 作为迭代器传递。这将根据需要延迟访问元素,因此可以迭代不会占用内存的大型 PCollection

注意:您可以使用 beam.pvalue.AsList(pcollection)PCollection 作为列表传递,但这要求所有元素都位于内存中。

示例 8:使用侧输入作为字典进行映射

如果 PCollection 足够小以至于可以放在内存中,那么可以将该 PCollection 作为字典传递。每个元素都必须是 (key, value) 对。请注意,所有 PCollection 的元素都必须位于内存中才能实现这一点。如果 PCollection 不适合内存,请改用 beam.pvalue.AsIter(pcollection)

示例 9:使用设置和捆绑上下文进行映射。

如果需要昂贵的共享对象(例如数据库连接),可以将其作为捆绑或设置上下文传递,该上下文像 Python 上下文管理器一样调用。例如

Pydoc Pydoc