pyspark Apache Spark警告“在RowBasedKeyValueBatch上调用spill()”的含义

ldioqlga  于 2022-12-03  发布在  Spark
关注(0)|答案(3)|浏览(243)

我正在使用Apache Spark本地模式运行pyspark 2.2.0作业,并看到以下警告:

WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.

此警告的原因可能是什么?这是我应该关心的事情还是可以安全地忽略它?

mbzjlibv

mbzjlibv1#

here所示,此警告意味着RAM已满,部分RAM内容已移至磁盘。
另请参阅Spark FAQ
我的数据需要放入内存才能使用Spark吗?
不会。Spark的运算符会在内存不适合的情况下将数据溢出到磁盘,从而允许它在任何大小的数据上都能很好地运行。同样,内存不适合的缓存数据集也会在需要时溢出到磁盘或重新计算,这取决于RDD的存储水平。

nc1teljy

nc1teljy2#

我猜这个消息比一个简单的警告更糟糕:这几乎是一个错误。
看一下源代码:

/**
   * 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;
  }

此处为:https://github.com/apache/spark/blob/master/sql/catalyst/src/main/java/org/apache/spark/sql/catalyst/expressions/RowBasedKeyValueBatch.java
所以我会说,在这里你是在一个无限循环的“需要溢出,但实际上不会溢出”。

ghhkc1vu

ghhkc1vu3#

除了上面的注解,我在运行jupyter/scipy-notebook Docker映像(然后单独导入PySpark)时收到了这个警告。当切换到jupyter/pyspark-notebook映像时,这个问题得到了修复。

相关问题