Python Bigquery阿帕奇梁管道“;悬挂;使用DirectRunner时

Python Bigquery阿帕奇梁管道“;悬挂;使用DirectRunner时,python,google-cloud-dataflow,apache-beam,Python,Google Cloud Dataflow,Apache Beam,我很好奇这里是否有其他人遇到过类似的python apache beam数据流运行程序问题,如下所述。(我暂时还不能运送到CloudRunner) 正在执行的查询返回的行数略低于1800万行。如果我给查询添加了一个限制(例如:10000),那么datafow将按预期工作。代码段中不包括WriteTableve接收器,它是一个支持写入索引的自定义接收器 正在使用的python sdk是2.2.0,但我正准备启动一些java 我在运行管道时看到的最后一条日志消息是: 警告:根:数据集 我的项目:te

我很好奇这里是否有其他人遇到过类似的python apache beam数据流运行程序问题,如下所述。(我暂时还不能运送到CloudRunner)

正在执行的查询返回的行数略低于1800万行。如果我给查询添加了一个限制(例如:10000),那么datafow将按预期工作。代码段中不包括WriteTableve接收器,它是一个支持写入索引的自定义接收器

正在使用的python sdk是2.2.0,但我正准备启动一些java

我在运行管道时看到的最后一条日志消息是:

警告:根:数据集 我的项目:temp_数据集_7708fbe7e7694cd49b8b0de07af2470b没有 存在,因此我们将使用location=None将其创建为临时

数据集被正确地创建和填充,当我调试到管道中时,我可以看到结果被迭代,但是这个管道本身似乎永远不会到达写入阶段

    options = {
        "project": "my-project",
        "staging_location": "gs://my-project/staging",
        "temp_location": "gs://my-project/temp",
        "runner": "DirectRunner"
    }
    pipeline_options = beam.pipeline.PipelineOptions(flags=[], **options)
    p = beam.Pipeline(options=pipeline_options)
    p | 'Read From Bigquery' >> beam.io.Read(beam.io.BigQuerySource(
        query=self.build_query(),
        use_standard_sql=True,
        validate=True,
        flatten_results=False,
    )) | 'Write to Bleve' >> WriteToBleve()

    result = p.run()
    result.wait_until_finish()

direct runner用于对少量数据进行本地调试和管道测试。它没有针对性能进行特别优化,也不打算用于大量数据——Python和Java都是这样

也就是说,目前对Python direct runner进行了一些非常重要的改进

我建议您尝试在Dataflow上运行,看看性能是否仍然不令人满意


另外,如果您可以用Java编写,我建议您这样做:它的性能通常比Python好几个数量级,特别是在从BigQuery读取的情况下:读取BigQuery需要通过BigQuery导出到Avro文件,而读取Avro文件的标准Python库的性能是,但不幸的是,目前没有性能良好且维护良好的替换。

当我使用本地runner进行测试时,我通常会在sql查询中添加一些
LIMIT 500
。不光荣,但它有帮助!