title: The purpose of ClosureCleaner.clean
body: <p>Before <code>sc.runJob</code> invokes <code>dagScheduler.runJob</code>, the func performed on the rdd is “cleaned” by <code>ClosureCleaner.clean</code>.
    Why  spark has to do this? What’s the purpose?</p>