/**
* Sometimes the TaskMemoryManager may call spill() on its associated MemoryConsumers to make
* space for new consumers. For RowBasedKeyValueBatch, we do not actually spill and return 0.
* We should not throw OutOfMemory exception here because other associated consumers might spill
*/
public final long spill(long size, MemoryConsumer trigger) throws IOException {
logger.warn("Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.");
return 0;
}
3条答案
按热度按时间mbzjlibv1#
如here所示,此警告意味着RAM已满,部分RAM内容已移至磁盘。
另请参阅Spark FAQ
我的数据需要放入内存才能使用Spark吗?
不会。Spark的运算符会在内存不适合的情况下将数据溢出到磁盘,从而允许它在任何大小的数据上都能很好地运行。同样,内存不适合的缓存数据集也会在需要时溢出到磁盘或重新计算,这取决于RDD的存储水平。
nc1teljy2#
我猜这个消息比一个简单的警告更糟糕:这几乎是一个错误。
看一下源代码:
此处为:https://github.com/apache/spark/blob/master/sql/catalyst/src/main/java/org/apache/spark/sql/catalyst/expressions/RowBasedKeyValueBatch.java
所以我会说,在这里你是在一个无限循环的“需要溢出,但实际上不会溢出”。
ghhkc1vu3#
除了上面的注解,我在运行
jupyter/scipy-notebook
Docker映像(然后单独导入PySpark)时收到了这个警告。当切换到jupyter/pyspark-notebook
映像时,这个问题得到了修复。