解释 Apache Beam python 语法

问题描述 投票:0回答:2

我已经通读了 Beam 文档,还浏览了 Python 文档,但没有找到对大多数示例 Apache Beam 代码中使用的语法的良好解释。

任何人都可以解释下面的代码中

_
|
>>
正在做什么吗?引号中的文本(即“ReadTrainingData”)是否有意义,或者可以与任何其他标签交换吗?换句话说,这个标签是如何使用的?

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))
python apache-beam
2个回答
85
投票

Python 中的运算符可以重载。在 Beam 中,

|
apply
的同义词,它将
PTransform
应用于
PCollection
以生成新的
PCollection
>>
允许您命名一个步骤,以便更轻松地在各种 UI 中显示 -
|
>>
之间的字符串仅用于这些显示目的并标识该特定应用程序。

参见 https://beam.apache.org/documentation/programming-guide/#transforms


0
投票

没有人提到

_
,所以只是为了完整起见:

  • 关于 _ 没有什么
    官方特别
    ,但将返回但您不关心的 变量分配给 _
     被认为是一种很好的做法。这使得代码的读者很明显地知道你打算扔掉它。
    
      它还会减少内存,因为当您重新分配(覆盖它)时,您会丢弃分配给
    • _
       的其他实例。
  • _有一个非官方
    角色:因为它是“一次性”变量,所以大多数 linter 和其他代码清晰度助手会以不同的方式对待它。
    
      例如,如果您分配了一个变量
    • use_me
      并且从未实际使用它,则 linter 会警告您有一个未使用的变量。如果您有严格的代码质量限制,也许您甚至无法使用未使用的变量将代码合并到生产中。
    • _
       不会被 linter 捕获(并且可以合并到严格的代码库中),因为它被 
      理解为一次性变量,因此您的代码中没有错误(至少在这方面没有错误) .
© www.soinside.com 2019 - 2024. All rights reserved.