地图
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
您找到所需的一切了吗?
所有内容都有用且清晰吗?您想更改什么吗?请告诉我们!