地图
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 接受 text 和 chars 作为参数。
示例 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 上下文管理器一样调用。例如
相关转换
- FlatMap 的行为与
Map相同,但对于每个输入,它可能产生零个或多个输出。 - Filter 对于仅决定是否输出元素的函数很有用。
- ParDo 是最通用的逐元素映射操作,它还包含其他功能,例如多个输出集合和侧输入。
Pydoc |
上次更新时间:2024/10/31
您找到所需的一切了吗?
所有内容都有用且清晰吗?您想更改什么吗?请告诉我们!


Pydoc