sim*_*ple 8 buffer jvm cluster-computing apache-spark pyspark
我使用这些设置(以及其他)启动了一个spark作业:
spark.driver.maxResultSize 11GB
spark.driver.memory 12GB
Run Code Online (Sandbox Code Playgroud)
我正在调试我的pyspark工作,它一直给我错误:
serialized results of 16 tasks (17.4 GB) is bigger than spark.driver.maxResultSize (11 GB)
Run Code Online (Sandbox Code Playgroud)
所以,我在配置设置中增加了spark.driver.maxResultSizeto 18 G.而且,它工作!!
现在,这很有趣,因为在这两种情况下spark.driver.memory是SMALLER比系列化返回结果.
为什么允许这样做?我认为这是不可能的,因为序列化的结果是17.4 GB在我调试的时候,这超过了驱动程序的大小12 GB,如上所示?
这怎么可能?
我的理解是,当我们要求Spark执行一个操作时,所有分区的结果都会被序列化,但这些结果不需要发送到驱动程序,除非collect()执行诸如a之类的某些操作。
spark.driver.maxResultSize定义了所有分区的序列化结果总大小的限制,并且与实际的大小无关spark.driver.memory。因此,您的代码spark.driver.memory可能小于您的spark.driver.maxResultSize代码,并且您的代码仍然可以工作。
如果您告诉我们此过程中使用的转换和操作或您的代码片段,我们可能会得到更好的想法。
| 归档时间: |
|
| 查看次数: |
374 次 |
| 最近记录: |