FlatMap

Pydoc Pydoc




对集合中的每个元素应用简单的 1 对多映射函数。多个元素被展平到结果集合中。

示例

在以下示例中,我们创建一个包含农产品及其图标、名称和持续时间的 PCollection 的管道。然后,我们以多种方式应用 FlatMap,以对每个输入元素产生零个或多个元素,从而生成结果 PCollection

FlatMap 接受一个返回 iterable 的函数,其中 iterable 的每个输出元素都是结果 PCollection 的一个元素。

示例 1: 使用预定义函数的 FlatMap

我们使用函数 str.split,该函数接受单个 str 元素并输出 strlist。此管道使用空格拆分输入元素,创建零个或多个元素的列表。

示例 2: 使用函数的 FlatMap

我们定义一个函数 split_words,该函数使用分隔符 ',' 拆分输入 str 元素,并输出 strlist

示例 3: 不使用函数的 FlatMap

FlatMap 的一个常见用例是将 PCollection 的可迭代对象展平为 PCollection 的元素。为此,请不要为 FlatMap 指定函数参数,它将使用身份映射函数。

示例 4: 使用 lambda 函数的 FlatMap

对于此示例,我们希望将 str 的列表的 PCollection 展平为 strPCollection。每个输入元素已经是 iterable,其中每个元素都是我们想要的结果 PCollection 中的内容。我们使用一个 lambda 函数,它返回它接收的相同输入元素。

示例 5: 使用生成器的 FlatMap

对于此示例,我们希望将 str 的列表的 PCollection 展平为 strPCollection。我们使用生成器来迭代输入列表并产生每个元素。生成器中的每个产生的结果都是结果 PCollection 中的一个元素。

示例 6: 用于键值对的 FlatMapTuple

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

示例 7: 使用多个参数的 FlatMap

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

在此示例中,split_words 接受 textdelimiter 作为参数。

示例 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 Pydoc