2016-11-02 56 views

回答

7

你不能从内部执行 shell - 因为Spark上下文已经创建,所以本地dir已经设置(和使用)。你应该把它作为参数时开始外壳:

./spark-shell --conf spark.local.dir=/temp/spark 
+0

除了您的解决方案,不能关闭当前的spark上下文(使用sc.stop()),然后设置spark.local.dir值,和sc.getOrCreate()它? – Yaron

+0

你是对的 - 它会(可能需要稍微更长的版本:'SparkSession.builde r.config(sc.getConf).config(“spark.local.dir”,“/ temp/spark”)。getOrCreate()'),但是你得到一个'WARN SparkContext:使用现有的SparkContext,一些配置可能不会生效“,这表明这不是推荐的路径。但是 - 是的,你说得对,随时可以添加为另一个答案。 –

3

@Tzach Zohar的解决方案似乎是正确的答案。

但是,如果你坚持要设置从spark.local.dir火花外壳,你可以做到这一点:

1)关闭更新了SC配置当前火花背景

sc.stop() 

2)并重新启动它。

更新的代码是好心由@ Tzach-Zohar的规定:

SparkSession.builder.config(sc.getConf).config("spark.local.‌​dir","/temp/spark").‌​getOrCreate()) 

@Tzach Zohar的纸条:“但你得到一个WARN SparkContext:使用现有SparkContext,有些配置可能无法生效,这表明这不是建议的路径

+0

来自Sparks'documentation(https://spark.apache.org/docs/2.1.0/configuration.html)关于'spark.local.dir'的部分:“注意:在Spark 1.0和更高版本中,这将被覆盖通过集群管理器设置的SPARK_LOCAL_DIRS(Standalone,Mesos)或LOCAL_DIRS(YARN)环境变量。“ – Wesam