嗨,我遇到了pyspark工作的一个奇怪问题,无法弄清楚发生了什么。 基本上我从数据帧转换RDD。然后我使用pipe()来调用外部命令来逐个处理RDD中的元素。 一切都运作良好,直到最后只有4个任务将继续运行,永远不会完成。 当我检查执行程序日志时,看起来所有记录都已处理但由于某种原因,任务没有退出。
只是想知道是否有人有任何线索?
答案 0 :(得分:2)
我遇到了同样的问题,看起来像是一个僵局。执行程序的线程处于WAITING状态,如线程转储中所示: 以及作业的任务时间是0ms(意味着它还没有开始!):
同时驱动程序进程认为执行程序正在运行并正在等待其结果:
可以通过终止整个作业并检查日志来检查最后一部分。对我来说,在.toDF()
对mapPartitions(...)
说些什么之后,杀死这份工作总是中断getResults
。
实际上,seiya通过他/她的评论激发了我提出一个想法。完整缓冲区可能是此行为的解释,因此我增加了与缓冲区相关的Spark设置的值,即spark.shuffle.file.buffer=256k
和spark.kryoserializer.buffer.max=256m
,这是其默认值的四倍。由于我更改了这些设置,因此问题暂时没有发生。