python - 当代码运行 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)
无济于事。有什么建议么?
解决方案
根据您正在做的事情,如果您正在运行 pyspark 代码并希望在作业完成之前看到结果,这可能行不通。
您可能会遇到 spark/pyspark 如何运行您的代码的问题。Spark 旨在有效地将您的任务划分为多个部分,并将这些部分分发到 EMR 集群的节点。
这意味着实际工作不会发生在运行笔记本的机器上。运行笔记本的主节点将任务发送到所有工作节点,然后在返回结果时收集结果,并且仅在作业完成后才显示它们。对于习惯于调试普通 python 的人来说,这可能会很麻烦,但这是 pyspark 在处理大量数据时如此快速的重要原因。
推荐阅读
- magento2 - 如何从magento的静态文件中删除版本信息
- hyperledger-fabric - Hyperledger Fabric:世界状态、通道和“hyperledger explorer”与“hyperledger composer historian”
- java - 将预编译的 C 共享库与 JNI/NDK 一起使用
- active-directory - 查询大型(>5000 个对象)Active Directory
- firebase - 如何在 Firebase 中使用 Cloud Firestore 制作组合主键?
- android - 更改包名称后 Flutter App 无法正常工作
- mixpanel - Mixpanel Flow .js 库
- javascript - req.body 没有出现在邮递员中
- android - 启用 proguard 会导致 crashlytics 异常
- html - 在 this.gotoAndPlay(1+Math.random()*3456); 之后大部分音频没有在 HTML Canvas 中播放