如何停止或删除 Pyspark 中的 HiveContext?
How to Stop or Delete HiveContext in 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() 它 returns JavaObject id=Id)
因此,如果我在同一个脚本中多次使用 my_func,它将在第二次失败。
我会尝试删除当我停止 SparkContext 时显然没有删除的 HiveContext。
谢谢
无法删除 HiveContext,因为某些状态在 sc.stop() 之后仍然存在,这使得它在某些情况下无法工作.
但是如果可行的话,您可以有一个解决方法(注意!!这很危险)。每次 start/stop 您的 sparkContext 时,您都必须删除 metastore_db。再一次,看看它是否适合你。代码是 Java 如下(在您的情况下,您必须在 Python 中修改它)。
File hiveLocalMetaStorePath = new File("metastore_db");
FileUtils.deleteDirectory(hiveLocalMetaStorePath);
您可以通过以下链接更好地理解它。
我面临以下问题:
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() 它 returns JavaObject id=Id) 因此,如果我在同一个脚本中多次使用 my_func,它将在第二次失败。 我会尝试删除当我停止 SparkContext 时显然没有删除的 HiveContext。
谢谢
无法删除 HiveContext,因为某些状态在 sc.stop() 之后仍然存在,这使得它在某些情况下无法工作.
但是如果可行的话,您可以有一个解决方法(注意!!这很危险)。每次 start/stop 您的 sparkContext 时,您都必须删除 metastore_db。再一次,看看它是否适合你。代码是 Java 如下(在您的情况下,您必须在 Python 中修改它)。
File hiveLocalMetaStorePath = new File("metastore_db");
FileUtils.deleteDirectory(hiveLocalMetaStorePath);
您可以通过以下链接更好地理解它。