amazon-web-services - 如何在 jupyter 中显示完整输出不仅是最后一个结果 - 对于 aws emr pyspark
问题描述
我希望有与此问题中提到的相同的选项:如何在 Jupyter 中显示完整输出,而不仅仅是最后一个结果?但是对于 AWS EMR 的 jupyterhub 的 pyspark 内核(Spark 2.4.4)。它适用于 python3 (python3.6) 内核。
如果我使用打印语句,它可以工作,但在这种情况下,如果最后一步失败,它就不起作用,那么它只会显示失败步骤的结果,如下图所示。
另外,需要注意的是,不确定它是否相关,但是,下面的代码不会同步运行,即打印等待打印等待....,但是,它只是在最后一次打印所有内容。
import time
for i in range(0,10):
print(i)
time.sleep(2)
如果引用的问题/帖子被删除或更改,只需从引用的帖子中添加问题。
我希望 Jupyter 打印所有交互式输出而不使用打印,而不仅仅是最后一个结果。怎么做?
例子 :
a=3
a
a+1
我想显示
3
4
解决方案
打印语句输出到运行 spark executor 的计算机上stdout
。stderr
考虑到您有一个有 n 个工作人员的大集群(RDD 或 DataFrame 的每个存储分区)。很难期望作业中的有序输出(例如地图)。这也可以被认为是 spark 本身的设计选择。这些数据将在哪里打印出来?由于节点是并行运行代码的,它们中的哪一个将首先打印?
因此,我们在作业中没有交互式打印语句。这些整件事也可以提醒你为什么我们有accumulators
和broadcast
变量。
因此,我建议您改用由步骤生成的日志并使用日志。要查看 Amazon S3 中的日志,必须启用集群日志记录(这是新集群的默认设置)。查看存档到 Amazon S3 的日志文件。
对于关于sleep()
and的第二个问题print
,python 是行缓冲的,这迫使它在打印到之前等待换行符stdout
。如果输出不是控制台,那么即使换行也不会触发刷新。
您可以强制行为为
import time
for i in range(0,10):
print(i,flush=True)
time.sleep(2)
推荐阅读
- apache-spark - 更新 Pyspark Dataframe 中数组的值
- c# - 如何获取使用 Identityserver4 的项目中的角色用户?
- wordpress - 当我们在主页上安装 WordPress 然后我们将它安装在一个目录中时会发生什么
- odoo - Odoo-当转换机会或导致客户时。自定义字段和数据未映射或未填充到客户
- bash - 使用 bash 跳过文件中的注释
- python - 当字典中有其他字母/数字时,如何检查字典中的值中的特定字母?
- ip-address - 目标 IP 地址 = '::'
- javascript - toBe() 字符串比较失败
- c# - EF 核心急切加载 - 多次加载相同的数据
- docker - 亚马逊linux的python3.8开发包