<p>不,<code>del thisRDD</code>是不够的,它只会删除指向RDD的指针。您应该调用<code>thisRDD.unpersist()</code>来删除缓存的数据。</p>
<p>对于您的信息,Spark使用了一个懒惰计算模型,这意味着当您运行此代码时:</p>
<pre><code>>>> thisRDD = sc.parallelize(xrange(10),2).cache()
</code></pre>
<p>您不会真正缓存任何数据,它只会标记为“<em>以便在RDD执行计划中缓存</em>”。你可以这样检查:</p>
<pre><code>>>> print thisRDD.toDebugString()
(2) PythonRDD[6] at RDD at PythonRDD.scala:43 [Memory Serialized 1x Replicated]
| ParallelCollectionRDD[5] at parallelize at PythonRDD.scala:364 [Memory Serialized 1x Replicated]
</code></pre>
<p>但当您至少调用一次此RDD上的操作时,它将被缓存:</p>
<pre><code>>>> thisRDD.count()
10
>>> print thisRDD.toDebugString()
(2) PythonRDD[6] at RDD at PythonRDD.scala:43 [Memory Serialized 1x Replicated]
| CachedPartitions: 2; MemorySize: 174.0 B; TachyonSize: 0.0 B; DiskSize: 0.0 B
| ParallelCollectionRDD[5] at parallelize at PythonRDD.scala:364 [Memory Serialized 1x Replicated]
</code></pre>
<p>您可以使用地址<code>http://<driver_node>:4040/storage</code>轻松检查Spark UI中的持久化数据和持久化级别。您将看到<code>del thisRDD</code>不会改变这个RDD的持久性,但是<code>thisRDD.unpersist()</code>会取消它的持久性,而您仍然可以在代码中使用这个RDD(虽然它不再在内存中持久,并且每次查询时都会重新计算)</p>