Удалить стол с помощью Pyspark

Объект SparkSession.catalog имеет несколько методов для взаимодействия с метастазами, а именно:

['cacheTable',
 'clearCache',
 'createExternalTable',
 'createTable',
 'currentDatabase',
 'dropGlobalTempView',
 'dropTempView',
 'isCached',
 'listColumns',
 'listDatabases',
 'listFunctions',
 'listTables',
 'recoverPartitions',
 'refreshByPath',
 'refreshTable',
 'registerFunction',
 'setCurrentDatabase',
 'uncacheTable']

К сожалению, похоже, что нет никакого программного способа отбросить стол.

Есть несколько способов добиться этого, как

spark.sql(f"drop table my_table")

или же

spark._jsparkSession.sharedState().externalCatalog().dropTable(db, table, True, True)

но они выглядят немного хакерскими по сравнению с простым, но отсутствующим методом dropTable ?

Есть ли способ лучше ?

Всего 1 ответ


AFAIK из упомянутых выше подходов являются наиболее часто используемыми. Нет другого способа, которым я чувствую ..

Но альтернативный способ я могу видеть из этих документов ...

Вы можете попробовать этот org.apache.spark.sql.hive.HiveUtils которого есть полезности (для удаления таблиц ..) для вас.

Я не очень хорош в Python, вы можете увидеть ниже пример Scala и следовать тому же пути для Python.

package org.apache.spark.sql.hive {
import org.apache.spark.sql.hive.HiveUtils
import org.apache.spark.SparkContext
object utils {
    def dropTable(sc: SparkContext, dbName: String, tableName: String, ignoreIfNotExists: Boolean, purge: Boolean): Unit = {
      HiveUtils
          .newClientForMetadata(sc.getConf, sc.hadoopConfiguration)
          .dropTable(dbName, tableName, ignoreIfNotExists, false)
    }
  }
}

Абонент будет как

import org.apache.spark.sql.hive.utils
utils.dropTable(sc, "default", "my_table", true, true)

Есть идеи?

10000