debugging 无法在vs代码调试控制台中打印pyspark Dataframe 方法(即show())

eni9jsuy  于 2022-11-24  发布在  Spark
关注(0)|答案(2)|浏览(210)

当我尝试在VS代码调试控制台中调用pyspark dataframe方法(如show())时,我收到了一个评估警告(见下面的引用)。我尝试重现此警告,但在不同的IDE(如Spyder或PyCharm)中,调试控制台可以调用pyspark dataframe方法。
正在评估:df.show()在3.00秒后未完成。这可能意味着以下几种情况:

  • 此评估确实很慢,这是意料之中的。在这种情况下,可以通过提高超时设置,将PYDEVD_WARN_EVALUATION_TIMEOUT环境变量设置为更大的值来消除此错误。
  • 评估运行时可能需要其他线程运行:在这种情况下,可以设置PYDEVD_UNBLOCK_THREADS_TIMEOUT环境变量,以便在给定超时后计算未完成时,解除阻塞其他线程,或者您可以手动恢复所有线程。

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

  • 评价陷入僵局:在这种情况下,您可以将PYDEVD_THREAD_DUMP_ON_WARN_EVALUATION_TIMEOUT环境变量设置为true,以便与此消息一起显示线程转储,也可以将PYDEVD_INTERRUPT_THREAD_TIMEOUT设置为某个值,以便调试器在发生这种情况时尝试中断计算(如果可能)。

有人在VS代码中调试pyspark方法时遇到过类似的警告吗?有没有关于如何解决这个问题的建议?我还提供了我的launch.json设置:

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

fiei3ece1#

执行F5(继续)并转到下一个断点/行,同时在调试控制台中进行评估,似乎打破了死锁,并打印了 Dataframe 。
请注意,这是针对较小的 Dataframe 观察到的,其不需要花费太多时间来评估。

zzoitvuj

zzoitvuj2#

在spark本地模式(单机)下观察到此问题。此问题不限于show()。它几乎适用于所有df相关操作。
我使用的解决方法是在代码中添加下面一行,并在该行上设置一个断点:
对于范围(100)中的i:睡眠时间(1)
当你陷入僵局时,只要按下F5键(继续),它就好像打破了僵局,并在调试控制台中吐出结果。调试器仍然在那一行暂停。你可以在调试控制台中发出下一条语句,并继续使用这个技巧多达100次。当然,你可以将它设置为大于100。

相关问题