2016-07-29 70 views
2

當試圖顯示SparkDF(測試)時,我得到一個KeyError,如下所示。在Test.show(3)之前使用的功能可能會出現問題。KeyError:在Google-Cloud-DataProc上的Jupyter上的pyspark上的'SPARK_HOME'

KeyError說:KeyError:'SPARK_HOME'。 我認爲SPARK_HOME沒有在主人和/或工人身上定義。有沒有一種方法可以在兩者上自動指定SPARK_HOME目錄?優選地通過使用初始化動作。

Py4JJavaErrorTraceback(最新最後調用) 在() ----> 1 Test.show(3)

/usr/lib/spark/python/pyspark/sql/dataframe.py in show(self, n, truncate) 
    255   +---+-----+ 
    256   """ 
--> 257   print(self._jdf.showString(n, truncate)) 
    258 
    259  def __repr__(self): 

...

raise KeyError(key) 
KeyError: 'SPARK_HOME' 

回答

2

你可以簡單地把以下是一個初始化操作:

#!/bin/bash 

cat << EOF | tee -a /etc/profile.d/custom_env.sh /etc/*bashrc >/dev/null 
export SPARK_HOME=/usr/lib/spark/ 
EOF 

你會想把它放在它在jupyter安裝操作之前執行,以確保它在jupyter進程啓動時存在。

編輯:要指定兩個初始化操作,您可以在一個逗號分隔的列表列出他們沒有空格,就像這樣:

gcloud dataproc clusters create \ 
    --initialization-actions gs://mybucket/spark_home.sh,gs://mybucket/jupyter.sh ... 
+0

添加初始化動作並沒有解決問題。我試圖把上面的代碼放在jupyter init動作中(沒有hashbang),並且還在jupyter init動作之前作爲單獨的init動作。 – Stijn

+0

正如你所建議的,我創建了一個bash腳本(spark_home.sh),其中包含上面指定的內容。即使將此作爲初始化操作,我也會得到spark home錯誤。 'gcloud dataproc羣集創建羣集--zone = europe-west1-d --master-machine-type n1-standard-4 --master-boot-disk-size 100 --num-workers 2 --worker-machine-type n1-standard-2 --worker-boot-disk-size 50 --project myproject --bucket mybucket --initialization-actions gs://stijnbucket/sh/spark_home.sh --initialization-actions gs:// stijnbucket/sh/jupyter.sh' – Stijn

+0

使用該初始化操作後,如果SSH進入主節點並鍵入'echo $ {SPARK_HOME}'它是否顯示爲至少爲登錄情況正確設置? –