数据流模板不使用运行时参数

时间:2019-05-23 17:53:09

标签: google-cloud-dataflow apache-beam

我正在使用数据流模板来运行云数据流

我正在提供一些默认值和调用模板。数据流在数据流管道摘要中正确显示了管道选项。但它没有使用运行时值。

class Mypipeoptions(PipelineOptions):
    @classmethod
    def _add_argparse_args(cls, parser):
        parser.add_value_provider_argument(
            '--preprocess_indir',
            help='GCS path of the data to be preprocessed',
            required=False,
            default='gs://default/dataset/'
        )
        parser.add_value_provider_argument(
            '--output_dir_train',
            help='GCS path of the preprocessed train data',
            required=False,
            default='gs://default/train/'
        )
        parser.add_value_provider_argument(
            '--output_dir_test',
            help='GCS path of the preprocessed test data',
            required=False,
            default='gs://default/test/'
        )
        parser.add_value_provider_argument(
            '--output_dir_validate',
            help='GCS path of the preprocessed validate data',
            required=False,
            default='gs://default/validate/'
        )

然后我正在检查值是否可访问

p = beam.Pipeline(options=args)

    if args.preprocess_indir.is_accessible():
        input_dir = args.preprocess_indir
    else:
        input_dir = getValObj(args.preprocess_indir)


    if args.output_dir_train.is_accessible():
        output_train = args.output_dir_train
    else:
        output_train = getValObj(args.output_dir_train)

    if args.output_dir_test.is_accessible():
        output_test = args.output_dir_test
    else:
        output_test = getValObj(args.output_dir_test)

    if args.output_dir_validate.is_accessible():
        output_validate = args.output_dir_validate
    else:
        output_validate = getValObj(args.output_dir_validate)

现在,在调用模板时,我可以看到想要作为(Mypipeoptions)管道选项参数传递的值,但在实际运行中未使用,而是使用给定的默认选项

1 个答案:

答案 0 :(得分:2)

我想我找到了解决方案,我是将运行时参数分配给变量,然后将其传递给输入或输出。

当我直接将运行时参数传递给源或接收器时,它就起作用了。像下面的那个

 'Write train dataset to destination' >> beam.io.tfrecordio.WriteToTFRecord(
        file_path_prefix=args.output_dir_train
    ) 

我相信我错过的部分是,在创建模板时,它会构建图形,并且只能将运行时参数插入其运行时。构建图形时,其他计算已经完成。

如果我错了请纠正我