Удалить стол с помощью Pyspark - PullRequest
1 голос
/ 24 марта 2020

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

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

К сожалению, похоже, нет никакого программного c способа удаления таблицы.

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

spark.sql(f"drop table my_table")

или

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

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

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

1 Ответ

0 голосов
/ 25 марта 2020

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)
...