我的spark应用程序具有运行很长时间的阶段。
如图所示,舞台停留在199/200。
当我单击舞台并查看其任务时。我发现两项任务耗时很长,它们的随机读取大小和随机溢出(内存)比其他执行程序大得多。
它有两个数据框:
large_df.cache,
small_df.cache
转换:
val df = large_df.join(broadcast(small_df))
df.filter(...)
动作:
final_df.cache
final_df.count
final_df.save(...)
有趣的是,当我添加"small_df.count" after small.cache
时,阶段将不会被卡住,随机读取的大小甚至在所有执行器中都是一样的。
问题: