繁体   English   中英

EMR 上的 Jupyter 笔记本在代码运行时未打印 output Pyspark

[英]Jupyter notebook on EMR not printing output while code is running Pyspark

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

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)无济于事。 有什么建议么?

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

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

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

这是一个缓冲问题。 您还可以使用python -u命令或设置 PYTHONUNBUFFERED envvar。 如果 python 以交互方式(在终端中)运行,则使用行缓冲,如果 output 被重定向,则使用块缓冲(例如,~4K 字节缓冲区)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM