我面临以下问题:
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时,它显然不会被删除。
谢谢
删除 HiveContext 是不可能的,因为某些状态在 sc.stop(( 之后仍然存在,这使得它在某些情况下不起作用。
但是,如果对您可行,您可以对此采取解决方法(注意!! 这很危险(。每次启动/停止 sparkContext 时,都必须删除metastore_db。再次,看看这对你来说是否可行。下面是Java的代码(在您的情况下,您必须在Python中对其进行修改(。
File hiveLocalMetaStorePath = new File("metastore_db");
FileUtils.deleteDirectory(hiveLocalMetaStorePath);
您可以从以下链接中更好地理解它。
https://issues.apache.org/jira/browse/SPARK-10872
https://issues.apache.org/jira/browse/SPARK-11924