【问题标题】:Jupyter notebook on EMR not printing output while code is running Pyspark当代码运行 Pyspark 时,EMR 上的 Jupyter 笔记本不打印输出
【发布时间】:2021-08-04 18:50:16
【问题描述】:

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

【问题讨论】:

    标签: python pyspark jupyter-notebook amazon-emr


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 我不确定这是否正确,我已经使用胶水开发端点在 zeppelin 中运行作业并生成了中间结果。
      猜你喜欢
      • 2016-11-04
      • 2017-08-08
      • 1970-01-01
      • 2022-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-05
      相关资源
      最近更新 更多