如何解决n个任务的序列化结果的总大小x MB大于spark.driver.maxResultSize
在spark数据帧上执行简单计数操作时,出现以下错误。
org.apache.spark.SparkException: Job aborted due to stage failure: Total size of serialized results of 4778 tasks (1024.3 MB) is bigger than spark.driver.maxResultSize (1024.0 MB)
设置:
master : yarn-client
spark.driver.memory : 4g
spark.driver.maxResultSize : 1g
spark.executor.cores : 2
spark.executor.memory : 7g
spark.executor.memoryOverhead : 1g
spark.yarn.am.cores : 1
spark.yarn.am.memory : 3g
spark.yarn.am.memoryOverhead : 1g
我不确定为什么这段简单的代码会向驱动程序发送超过1 GB的数据。理想情况下,整个计算应该在执行程序中进行,而只有结果应该交给驱动程序。
如果将 spark.driver.maxResultSize 增加到一个更高的值,该代码可能会起作用,但是我想了解为什么驱动程序需要这么多的内存来进行简单的计数操作。
更多信息:
Table : Hive table on top of s3 files
File type : parquet
Compression : snappy
Partition By : date,hr
Data Size : 91 GB [date = '2020-08-13' and hr = 00 to 23]
Number of Sub folders : 24 [hr partitions]
Number of Files : 1286 [date = '2020-08-13' and hr = 00 to 23]
解决方法
由于您使用过select *
,然后希望驱动程序执行计数,因此我认为它会将结果发送给驱动程序。
如果要计数,可以尝试select count(*)
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。