python - 带有 DirectRunner (SUBPROCESS_SDK) 的 Apache Beam 只使用一个工作人员,我如何强制它使用所有可用的工作人员?

标签 python apache-beam apache-beam-io direct-runner

以下代码:

def get_pipeline(workers):
    pipeline_options = PipelineOptions(['--direct_num_workers', str(workers)])
    return beam.Pipeline(options=pipeline_options,
                         runner=fn_api_runner.FnApiRunner(
                             default_environment=beam_runner_api_pb2.Environment(
                                 urn=python_urns.SUBPROCESS_SDK,
                                 payload=b'%s -m apache_beam.runners.worker.sdk_worker_main'
                                         % sys.executable.encode('ascii'))))

with get_pipeline(4) as pipeline:
  _ = (  
        pipeline
        | 'ReadTestData' >> beam.io.ReadFromParquet(input_files, columns=all_columns)
        | "write" >> beam.io.WriteToText("/tmp/txt2")
  )

只使用 4 个可用的 worker 中的一个,并且只生成一个大输出文件(即使有很多输入文件)。

如何强制 Beam 管道并行工作,即如何强制每个输入文件由不同的工作人员分别处理?

最佳答案

您使用的是哪个版本的光束?

我对 beam 2.16.0 有同样的问题,但版本 2.17.0 似乎具有预期的行为。

您可能想尝试使用此版本,同时保持您的代码不变。

关于python - 带有 DirectRunner (SUBPROCESS_SDK) 的 Apache Beam 只使用一个工作人员,我如何强制它使用所有可用的工作人员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58699555/

相关文章:

python - "print"和 "return"之间的正式区别是什么?

python - 如何在取平均值的同时合并日期时间列上的值

python pptx导出图像(png,jpg)

python - 使用 Beam IO ReadFromPubSub 模块时,可以在 Python 中拉取带有属性的消息吗?不清楚是否支持

java - FileBasedSink 的类型参数是什么?

python - 如何使用 sklearn.datasets.make_classification 生成给定范围内的合成数据?

java - Apache 光束中的 Gamma 分布

google-bigquery - Dataflow Runner - 尝试刷新以获取初始 access_token

python-2.7 - 在Python中的数据流中写入云存储的动态目标

apache-flink - 使用 flink runner 时如何在 apache Beam 中执行检查点?