这个错误是由于Python解释器无法正确跟踪包含本地C扩展的堆栈。解决此问题的一个简单方法是在Dataflow任务的启动脚本中添加一个环境变量PYTHONUNBUFFERED=1
。这将禁用Python的输出缓冲,以便错误能够立即输出并显示在控制台上,而不是在脚本结束时输出。以下是示例代码:
import apache_beam as beam
with beam.Pipeline() as p:
pcoll = p | beam.Create([1, 2, 3])
_ = pcoll | 'ThrowError' >> beam.Map(lambda x: 1 / (x - 3))
在运行以下命令时,您将看到错误消息并且程序将在这里停止:
python -m apache_beam.examples.wordcount --input gs://dataflow-samples/shakespeare/kinglear.txt --output gs://YOUR_OUTPUT_BUCKET/wordcount/outputs
该命令将返回以下错误消息:
“实际结果”。 ValueError:“堆栈下溢”
要解决此错误,需要将PYTHONUNBUFFERED
变量添加到命令中,如下所示:
PYTHONUNBUFFERED=1 python -m apache_beam.examples.wordcount --input gs://dataflow-samples/shakespeare/kinglear.txt --output gs://YOUR_OUTPUT_BUCKET/wordcount/outputs
这表明,如果Python出现问题,错误消息将立即输出到控制台,从而使您能够识别和解决错误。