栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

16个任务的序列化结果的总大小(1048.5 MB)大于spark.driver.maxResultSize(1024.0 MB)

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

16个任务的序列化结果的总大小(1048.5 MB)大于spark.driver.maxResultSize(1024.0 MB)

似乎问题在于您试图拉回驱动程序的数据量太大。您很可能正在使用 collect 方法从 Dataframe / RDD中 检索所有值。该
驱动程序 是一个过程,通过收集 数据框 你拉你已经在集群回分发到一个节点的数据的。 这违反了分发它的目的!
仅在将数据减少到可管理的数量之后才执行此操作。

您有两种选择:

  1. 如果确实需要处理所有这些数据,则应将其保留在执行程序中。使用 HDFSParquet 以分布式方式保存数据,并使用Spark方法在群集上使用数据,而不是尝试将所有数据收集回一个位置。

  2. 如果确实需要将数据送回驱动程序,则应检查是否确实需要所有数据。如果只需要摘要统计信息,则在调用collect之前在执行程序上进行计算。或者,如果您仅需要前100个结果,则仅 收集 前100个结果。

更新:

还有另一个原因会导致您不太明显地遇到此错误。除了您显式调用collect之外,Spark还将尝试将数据发送回驱动程序。如果您正在使用累加器,用于广播联接的数据以及有关每个任务的一些小状态数据,它还将为每个任务发送回累加器结果。如果您有很多分区(根据我的经验,超过20k),有时您会看到此错误。这是一个已知问题,需要进行一些改进,还有很多工作要做。

如果这是您遇到的问题,可以选择的解决方法是:

  1. 增加
    spark.driver.maxResultSize
    或将其设置为0可无限
  2. 如果是广播联接的元凶,则可以减小
    spark.sql.autoBroadcastJoinThreshold
    以限制广播联接数据的大小
  3. 减少分区数


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/651742.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号