如何在 jupyter 中显示完整输出而不仅仅是最后的结果 - 对于 aws emr pyspark

how to display full output in jupyter not only last result - for aws emr pyspark

我希望有与这个问题中提到的相同的选项: 但对于 AWS EMR 的 jupyterhub 的 pyspark 内核 (Spark 2.4.4)。它适用于 python3 (python3.6) 内核。

如果我使用 print 语句,它可以工作,但在那种情况下,如果最后一步失败,它就不起作用,那么它只会显示失败步骤的结果,如下图所示。

另外,要注意,不确定它是否相关,但是,下面的代码没有 运行 同步,即打印等待打印等待....,但是,它只是一次打印所有内容结束。

import time
for i in range(0,10):
    print(i)
    time.sleep(2)

只需添加引用 post 的问题,以防引用 question/post 被删除或更改。

我希望 Jupyter 在不打印的情况下打印所有交互输出,而不仅仅是最后一个结果。怎么做到的?

示例:

a=3
a
a+1

我要展示

3
4

打印语句输出到计算机上的 stdoutstderr,即 运行 spark 执行程序。

考虑到你有一个有 n 个 worker 的大集群(每个存储一个 RDD 或 DataFrame 的分区)。很难期望作业中的有序输出(例如地图)。这也可以被认为是 spark 本身的一种设计选择。这些数据将在哪里打印出来?由于节点是 运行 并行代码,它们中的哪一个将首先打印?

因此,我们在作业中没有交互式打印语句。这些整件事还可以提醒您为什么我们有 accumulatorsbroadcast 变量。

因此,我会建议您改用步骤生成的日志并使用日志。要查看 Amazon S3 中的日志,必须启用集群日志记录(这是新集群的默认设置)。查看 Log Files Archived to Amazon S3.

关于你的第二个问题关于sleep()print,python是行缓冲的,这迫使它在之前等待换行打印到 stdout。如果输出不是控制台,那么即使是换行符也不会触发刷新。

您可以将行为强制为

import time
for i in range(0,10):
    print(i,flush=True)
    time.sleep(2)