Как остановить или удалить HiveContext в Pyspark?
Я сталкиваюсь со следующей проблемой:
def my_func(table, usr, psswrd):
from pyspark import SparkContext, SQLContext, HiveContext, SparkConf
sconf = SparkConf()
sconf.setAppName('TEST')
sconf.set("spark.master", "local[2]")
sc = SparkContext(conf=sconf)
hctx = HiveContext(sc)
## Initialize variables
df = hctx.read.format("jdbc").options(url=url,
user=usr,
password=psswd,
driver=driver,
dbtable=table).load()
pd_df = df.toPandas()
sc.stop()
return pd_df
Проблема здесь заключается в сохранении HiveContext (т. Е. Если я выполняю hctx._get_hive_ctx(), он возвращает JavaObject id=Id). Поэтому, если я использую my_func несколько раз в одном и том же сценарии, он завершится неудачно во второй раз. Я бы попытался удалить HiveContext, который, очевидно, не удаляется, когда я останавливаю SparkContext.
Спасибо
1 ответ
Удаление HiveContext невозможно, так как некоторое состояние сохраняется после sc.stop(), что делает его неработоспособным в некоторых случаях.
Но вы могли бы обойти это (осторожно! Это опасно), если это возможно для вас. Вы должны удалять metastore_db каждый раз, когда запускаете / останавливаете свой sparkContext. Опять же, посмотрите, возможно ли это для вас. Код Java ниже (в вашем случае вы должны изменить его в Python).
File hiveLocalMetaStorePath = new File("metastore_db");
FileUtils.deleteDirectory(hiveLocalMetaStorePath);
Вы можете лучше понять это из следующих ссылок.