pyspark dataframe方法(即show())不能在vs code调试控制台中打印



当尝试调用pyspark dataframe方法时,例如VS Code调试控制台中的show(),我得到一个评估警告(见下面的引用)。我试图重现这个警告,但是在不同的ide中,如Spyder或PyCharm,调试控制台可以调用pyspark dataframe方法。

正在求值:df.show()在3.00秒后没有完成。这可能意味着许多事情:

  • 这个评估真的很慢,这是意料之中的。在这种情况下,可以通过引发超时、设置PYDEVD_WARN_EVALUATION_TIMEOUT环境变量设置为更大的值

  • 计算可能需要其他线程在运行:在这种情况下,可以设置PYDEVD_UNBLOCK_THREADS_TIMEOUT环境变量,这样如果在给定的超时后计算没有完成,其他线程被解除阻塞,或者您可以手动恢复所有线程。

    或者,也可以通过设置a来跳过特定线程的中断相关线程中的pydev_do_not_trace = True属性。线程实例(如果某个线程应该一直运行,并且不希望在其中遇到断点)。

  • 求值已死锁:在这种情况下,您可以设置PYDEVD_THREAD_DUMP_ON_WARN_EVALUATION_TIMEOUT环境变量设置为true,以便与此消息一起显示线程转储可选地,将PYDEVD_INTERRUPT_THREAD_TIMEOUT设置为某个值,以便调试器当发生这种情况时,尝试中断计算(如果可能的话)。

在VS Code中调试pyspark方法时,是否有人遇到过类似的警告,并对如何解决这个问题提出建议?我还提供了我的发射装置。json设置:

"type": "python",
"request": "launch",
"program": "${file}",
"env": {"DISPLAY":":1",
"PYTHONPATH": "${workspaceRoot}",
"PYDEVD_WARN_EVALUATION_TIMEOUT": "3"},
"console": "internalConsole"

执行F5 (Continue)并转到下一个断点/行,而在调试控制台中进行评估,似乎打破了死锁,并且数据帧正在打印。

请注意,这是在较小的数据帧中观察到的,它不需要花费太多时间来计算。

在spark本地模式(单机)下观察到此问题。这个问题不仅限于show()。它几乎应用了所有与df相关的操作。

我使用的解决方法是在代码中添加下面一行,并在这一行设置断点:

for I in range(100): time.sleep(1)

当你卡住(在死锁中),只要按F5(继续),它似乎打破了死锁,并在调试控制台吐出结果。然后调试器仍然在该行暂停。您可以在调试控制台中发出下一条语句,并继续使用此技巧多达100次。当然,您可以将其设置为100以上。

相关内容

最新更新