我认为在pyspark中,python代码运行在python进程中,这些进程不使用pyspark创建的JVM的内存堆。所以,
如果我使用pyspark提供的函数,我处理的是JVM内存堆( spark.executor.memory)
spark.driver.memory,我使用python本机函数),那么我处理python进程内存堆(spark.driver.memoryOverhead和spark.executor.memoryOverhead)
)。
这是否意味着,如果我有一个同时通过python和pyspark方法的数据,那么我应该在spark.driver/executor.memory和spark.driver/executor.overOverhead之间分配几乎相同的可用内存,因为它们都必须容纳数据?memoryOverhead的缺省值是executor/driverMemory * 0.10, with minimum of 384,如果我最后使用python函数的话,这个值看起来很低。我们应该尽量避免使用python函数,因为这会使我的内存容量增加一倍,因为我可以将其全部分配给spark.driver/executor.memory。
发布于 2022-01-14 12:03:22
我肯定会答应的!
除了内存问题之外,当对象必须在JVM和python进程之间传递时,性能也会出现巨大损失。
https://stackoverflow.com/questions/70699010
复制相似问题