2016-11-02 61 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