FlatMap
Pydoc |
对集合中的每个元素应用简单的 1 对多映射函数。多个元素被展平到结果集合中。
示例
在以下示例中,我们创建一个包含农产品及其图标、名称和持续时间的 PCollection
的管道。然后,我们以多种方式应用 FlatMap
,以对每个输入元素产生零个或多个元素,从而生成结果 PCollection
。
FlatMap
接受一个返回 iterable
的函数,其中 iterable
的每个输出元素都是结果 PCollection
的一个元素。
示例 1: 使用预定义函数的 FlatMap
我们使用函数 str.split
,该函数接受单个 str
元素并输出 str
的 list
。此管道使用空格拆分输入元素,创建零个或多个元素的列表。
示例 2: 使用函数的 FlatMap
我们定义一个函数 split_words
,该函数使用分隔符 ','
拆分输入 str
元素,并输出 str
的 list
。
示例 3: 不使用函数的 FlatMap
FlatMap
的一个常见用例是将 PCollection
的可迭代对象展平为 PCollection
的元素。为此,请不要为 FlatMap
指定函数参数,它将使用身份映射函数。
示例 4: 使用 lambda 函数的 FlatMap
对于此示例,我们希望将 str
的列表的 PCollection
展平为 str
的 PCollection
。每个输入元素已经是 iterable
,其中每个元素都是我们想要的结果 PCollection
中的内容。我们使用一个 lambda 函数,它返回它接收的相同输入元素。
示例 5: 使用生成器的 FlatMap
对于此示例,我们希望将 str
的列表的 PCollection
展平为 str
的 PCollection
。我们使用生成器来迭代输入列表并产生每个元素。生成器中的每个产生的结果都是结果 PCollection
中的一个元素。
示例 6: 用于键值对的 FlatMapTuple
如果您的 PCollection
由 (key, value)
对组成,您可以使用 FlatMapTuple
将它们解包到不同的函数参数中。
示例 7: 使用多个参数的 FlatMap
您可以将具有多个参数的函数传递给 FlatMap
。它们作为额外的位置参数或关键字参数传递给函数。
在此示例中,split_words
接受 text
和 delimiter
作为参数。
示例 8: 使用作为单例的侧输入的 FlatMap
如果 PCollection
具有单个值,例如来自另一个计算的平均值,则将 PCollection
作为 *单例* 传递将访问该值。
在此示例中,我们将 PCollection
的值 ','
作为单例传递。然后,我们使用该值作为 str.split
方法的分隔符。
示例 9: 使用作为迭代器的侧输入的 FlatMap
如果 PCollection
具有多个值,请将 PCollection
作为 *迭代器* 传递。这将根据需要懒惰地访问元素,因此可以迭代无法容纳在内存中的大型 PCollection
。
**注意**:您可以使用
beam.pvalue.AsList(pcollection)
将PCollection
作为 *列表* 传递,但这要求所有元素都必须容纳在内存中。
示例 10: 使用作为字典的侧输入的 FlatMap
如果 PCollection
足够小以至于可以容纳在内存中,则可以将该 PCollection
作为 *字典* 传递。每个元素必须是 (key, value)
对。请注意,此 PCollection
的所有元素都必须容纳在内存中。如果 PCollection
无法容纳在内存中,请改用 beam.pvalue.AsIter(pcollection)
。
相关转换
Pydoc |
最后更新时间:2024/10/31
您是否找到了您要找的所有内容?
所有内容都实用且清晰吗?您想更改任何内容吗?请告诉我们!