如何避免“任务大小太大”?
Posted
技术标签:
【中文标题】如何避免“任务大小太大”?【英文标题】:How to avoid "Task size too large"? 【发布时间】:2017-03-06 02:31:32 【问题描述】:我的问题是,在使用 Spark SQL 将表非规范化为更大的表时,我收到了任务大小过大的警告。
在人们指出其他答案说使用广播或避免关闭整个班级之前;让我说我已经阅读了这些内容,但在使用 Spark SQL 时仍然感到困惑。
在使用 Spark SQL 时,我的任务大小达到了推荐大小的 10 倍。
情况如下:
我有 10 多个表/数据框要加入一个超级表。 我创建了一个 scala 对象,并在正文中从它们的 CSV 中填充了这 10 个表。 我将该对象的成员(仅表)导入到其他对象中,以形成他的超级表。 当这 10 个表之间的 Spark-SQL 连接运行以将结果表写入 parquet 文件时,我会收到任务大小警告。额外信息:
我已经尝试将源表移动到不同的类中并将它们嵌入到函数中,并且任务大小没有改变。
我不确定广播如何帮助解决这个问题,因为源数据是使用 Spark-CSV 直接读入数据帧的,因此应该已经分发了。
【问题讨论】:
你能在问题中包含警告吗?你能显示导致警告的代码吗? 【参考方案1】:在 Spark 中,您可以选择 caching (persistence) level 将一些大型内存对象卸载到磁盘,并使用 unpersist()
选择丢弃哪些已经缓存的结果。
【讨论】:
请进一步充实您的答案,例如解释选择缓存级别如何避免大量内存使用以及如何使用unpersist()
来释放内存的示例。以上是关于如何避免“任务大小太大”?的主要内容,如果未能解决你的问题,请参考以下文章