如果其他人遇到类似python apache beam dataflow runner的问题,我很好奇,如下所述。 (我还没有能够发送到CloudRunner)
正在执行的查询返回的行数不到1800万行。如果我添加一个LIMIT来查询(例如:10000),那么datafow按预期工作。 WriteToBleve接收器中不包含WriteToBleve接收器,它是一个支持写入bleve索引的自定义接收器。
正在使用的python sdk是2.2.0,但我已准备好引发一些java ....
运行管道时看到的最后一条日志消息是:
警告:根:数据集 我的项目:temp_dataset_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()
答案 0 :(得分:3)
直接转轮用于本地调试和测试少量数据的管道。它没有特别针对性能进行优化,也不适用于大量数据 - 这适用于Python和Java。
也就是说,目前对Python直接跑步者are in progress进行了一些非常严肃的改进。
我建议您尝试在Dataflow上运行,看看性能是否仍不理想。
另外,如果您可以用Java编写 - 我建议这样做:它通常比Python更好地执行数量级,特别是在从BigQuery读取的情况下:阅读BigQuery通过BigQuery导出到Avro文件,以及性能用于阅读Avro文件的标准Python库是notoriously horrible,但不幸的是,目前没有表现良好且维护良好的替代品。