首页 > 解决方案 > 当代码运行 Pyspark 时,EMR 上的 Jupyter 笔记本不打印输出

问题描述

我在 Jupyter pyspark 笔记本中运行了一个非常非常简单的脚本,但它在运行时不会打印结果,它只是在完成后吐出输出。这是代码:

import time
import sys

for i in range(10):
    print(i)
    time.sleep(1)

这会等待 10 秒,然后打印:

0
1
2
3
4
5
6
7
8
9

我想在结果发生时打印结果。我试图用

for i in range(10):
    print(i)
    sys.stdout.flush()

print(i, flush=True)无济于事。有什么建议么?

标签: pythonpysparkjupyter-notebookamazon-emr

解决方案


根据您正在做的事情,如果您正在运行 pyspark 代码并希望在作业完成之前看到结果,这可能行不通。

您可能会遇到 spark/pyspark 如何运行您的代码的问题。Spark 旨在有效地将您的任务划分为多个部分,并将这些部分分发到 EMR 集群的节点。

这意味着实际工作不会发生在运行笔记本的机器上。运行笔记本的主节点将任务发送到所有工作节点,然后在返回结果时收集结果,并且仅在作业完成后才显示它们。对于习惯于调试普通 python 的人来说,这可能会很麻烦,但这是 pyspark 在处理大量数据时如此快速的重要原因。


推荐阅读