title: What's the difference between SparkSession.catalog and SparkSession.sessionState.catalog?
body: <p>I'm learning Spark, got confused about Spark's Catalog.</p>
  
  <p>I found a catalog in SparkSession, which is an instance of CatalogImpl, as below</p>
  
  <pre><code>  /**
     * Interface through which the user may create, drop, alter or query underlying
     * databases, tables, functions etc.
     *
     * @since 2.0.0
     */
    @transient lazy val catalog: Catalog = new CatalogImpl(self)
  </code></pre>
  
  <p>And I found that there is a catalog in SparkSession.sessionSate, which is an instance of SessionCatalog.</p>
  
  <p>What's the difference between them?</p>