我使用这些设置(以及其他)启动了一个火花作业:
spark.driver.maxResultSize 11GB
spark.driver.memory 12GB
我正在调试我的pyspark
工作,它一直给我错误:
serialized results of 16 tasks (17.4 GB) is bigger than spark.driver.maxResultSize (11 GB)
因此,我在配置设置中将spark.driver.maxResultSize
增加到18 G
。而且,它工作!!
现在,这很有趣,因为在两种情况下spark.driver.memory
都是 SMALLER 而不是返回的序列化结果。
为什么允许这样做?我认为这是不可能的,因为我在调试时序列化的结果是17.4 GB
,这超过了驱动程序的大小12 GB
,如上所示?
这怎么可能?
答案 0 :(得分:1)
这是可能的,因为<input type="text" name="text_1" disabled="disabled">
配置JVM驱动程序进程而不是Python解释器,它们之间的数据是通过套接字传输的,驱动程序进程不必将所有数据保存在内存中(不要转换为本地结构)。
答案 1 :(得分:0)
我的理解是,当我们要求Spark执行操作时,所有分区的结果都会被序列化,但这些结果不需要发送给驱动程序,除非执行某些操作,例如collect()
。
spark.driver.maxResultSize
定义了对所有分区的序列化结果总大小的限制。与实际spark.driver.memory
无关。因此,您的spark.driver.memory
可能会比您的spark.driver.maxResultSize
更小,而您的代码仍可以使用。
如果您告诉我们此流程中使用的转换和操作或您的代码段,我们可能会有更好的想法。