我已阅读Beam文档并查看Python文档,但没有找到大多数Apache Beam示例代码中使用的语法的良好解释。请问有人能够解释下面代码中
(Note: The translated text above is in simplified Chinese.)
_
,|
和>>
的作用吗?此外,引号中的文本 'ReadTrainingData' 有意义吗?还是可以用任何其他标签替换它?换句话说,该标签如何被使用?(Note: The translated text above is in simplified Chinese.)
train_data = pipeline | 'ReadTrainingData' >> _ReadData(training_data)
evaluate_data = pipeline | 'ReadEvalData' >> _ReadData(eval_data)
input_metadata = dataset_metadata.DatasetMetadata(schema=input_schema)
_ = (input_metadata
| 'WriteInputMetadata' >> tft_beam_io.WriteMetadata(
os.path.join(output_dir, path_constants.RAW_METADATA_DIR),
pipeline=pipeline))
preprocessing_fn = reddit.make_preprocessing_fn(frequency_threshold)
(train_dataset, train_metadata), transform_fn = (
(train_data, input_metadata)
| 'AnalyzeAndTransform' >> tft.AnalyzeAndTransformDataset(
preprocessing_fn))
.method()
语法转换为infix
运算符。例如,将a.plus(b)
转换为a + b
的语法。请查看源代码中的__or__
、__ror__
和__rrshift__
函数定义 https://github.com/apache/beam/blob/master/sdks/python/apache_beam/transforms/ptransform.py#L448。因此,`MyPTransform | NextPTransform实际上是将这两个 PTransform 对象作为列表
_parts传递给新的
_ChainedPTransform对象,并且如果您使用
__or__` 添加另一个 PTransform,则会展开嵌套列表。 - Davos__ror__
与__or__
相同,它们最终都变成了管道中缀符号|
,但是__ror__
允许您定义如何将其他对象传递到PTransform
的管道中,其中这些其他对象没有定义管道运算符方法。这种方法使得右侧对象的管道运算符仍然可以从左到右工作。 - DavosPTransforrm.apply(NextPTransform.apply(YetAnotherPTransform))
,但您始终可以为每个步骤创建新变量。毕竟,它是惰性评估的,并且不会进行数据深层拷贝,因此没有惩罚。 - Davos