2014-04-23 47 views
75

這是別人在另一個論壇上的問題的副本,從來沒有回答過,所以我想我會在這裏重新提問,因爲我有同樣的問題。 (請參閱http://geekple.com/blogs/feeds/Xgzu7/posts/351703064084736在python shell中導入pyspark

我在我的機器上正確安裝了Spark,並且能夠在使用./bin/pyspark作爲我的python解釋器時使用pyspark模塊運行python程序而不會出錯。

然而,當我試圖運行常規的Python殼,當我嘗試導入pyspark模塊,我得到這個錯誤:

from pyspark import SparkContext 

和它說

"No module named pyspark". 

我怎樣才能解決這個問題?是否有一個環境變量,我需要設置指向Python的pyspark標題/庫/等。如果我的火花裝置是/ spark /,我需要包括哪些pyspark路徑?或者,pyspark程序只能從pyspark解釋器運行?

+0

他們說,更改環境變量是「不超有效的,因爲它是由倉覆蓋非常快/火花提交。「[也許你可以從這個交流中學到一些東西](http://mail-archives.apache.org/mod_mbox/incubator-spark-user/201407.mbox/%[email protected].com%3E) – emmagras

回答

31

原來,pyspark bin是LOADING python並自動加載正確的庫路徑。看看$ SPARK_HOME /斌/ pyspark:

# Add the PySpark classes to the Python path: 
export PYTHONPATH=$SPARK_HOME/python/:$PYTHONPATH 

我加入這行到我的.bashrc文件,現在這些模塊被正確地找到了!

+1

除了這一步之外,我還需要添加:'export SPARK_HOME =〜/ dev/spark-1.1.0',去圖。你的文件夾名稱可能會有所不同。 – emmagras

40

如果打印這樣的錯誤:

ImportError: No module named py4j.java_gateway

請加$ SPARK_HOME /蟒蛇/建築PYTHONPATH:

export SPARK_HOME=/Users/pzhang/apps/spark-1.1.0-bin-hadoop2.4 
export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/build:$PYTHONPATH 
+8

正如另一個回覆中所述 http://stackoverflow.com/questions/26533169/why-cant -pyspark-find-py4j-java-gateway我必須添加以下內容 export PYTHONPATH = $ SPARK_HOME/python/lib/py4j-0.8.2.1-src.zip:$ PYTHONPATH – meyerson

13

在Mac上,我用自制安裝火花(公式「阿帕奇火花「)。然後,我設置了PYTHONPATH這種方式使Python的進口工作:

export SPARK_HOME=/usr/local/Cellar/apache-spark/1.2.0 
export PYTHONPATH=$SPARK_HOME/libexec/python:$SPARK_HOME/libexec/python/build:$PYTHONPATH 

更換「1.2.0」與你的Mac的實際Apache的火花版本。

13

不運行PY文件:python filename.py 改用:spark-submit filename.py

15

通過導出SPARK路徑和Py4j路徑,它開始工作:

export SPARK_HOME=/usr/local/Cellar/apache-spark/1.5.1 
export PYTHONPATH=$SPARK_HOME/libexec/python:$SPARK_HOME/libexec/python/build:$PYTHONPATH 
PYTHONPATH=$SPARK_HOME/python/lib/py4j-0.8.2.1-src.zip:$PYTHONPATH 
export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/build:$PYTHONPATH 

所以,如果你不這樣做希望每次打開這些文件時,您想要啓動Python shell,您可能需要將其添加到您的.bashrc文件中

+1

I在我的'Apache Spark'安裝中找不到* libexec *目錄,有什麼想法? –

+0

@AlbertoBonsanto對不起。我沒有遇到這個問題。所以,不知道:( – Dawny33

+1

是的,他們拿出了libex ec文件夾在火花1.5.2 – bluerubez

46

這裏是一個簡單的方法(如果您不打擾它是如何工作的!)

Use findspark

  1. 轉到你的Python殼

    pip install findspark import findspark findspark.init()

  2. 導入必要的模塊

    from pyspark import SparkContext from pyspark import SparkConf

  3. 完成!

+0

其他解決方案不適合我。 我現在在我的程序中使用findspark。似乎是一個體面的問題解決方法。 –

+0

救了我的屁股! – RedRoosterMobile

+0

我寧願不需要這樣做..但***嘿*** ..給* *沒有別的作品* ..我會接受它。 – javadba

1

我得到這個錯誤,因爲python腳本我試圖提交被稱爲pyspark.py(捂臉)。解決方法是按照上面的建議設置我的PYTHONPATH,然後將腳本重命名爲pyspark_test.py並清理基於腳本原始名稱創建的pyspark.pyc,並清除此錯誤。

0

在DSE(DataStax卡桑德拉&火花) 以下位置需要的情況下被添加到PYTHONPATH

export PYTHONPATH=/usr/share/dse/resources/spark/python:$PYTHONPATH 

然後用DSE pyspark獲得在路徑中的模塊。

dse pyspark 
1

我有這個相同的問題,並會在上面提出的解決方案中增加一件事。在Mac OS X上使用Homebrew安裝Spark時,您需要更正py4j路徑地址以在路徑中包含libexec(請記住將py4j版本更改爲您所擁有的版本);

PYTHONPATH=$SPARK_HOME/libexec/python/lib/py4j-0.9-src.zip:$PYTHONPATH 
+0

注 - 我嘗試解壓縮並只使用'py4j'文件夾,沒有工作。使用zip文件... –

2

爲了擺脫ImportError: No module named py4j.java_gateway,你需要添加下面幾行:

import os 
import sys 


os.environ['SPARK_HOME'] = "D:\python\spark-1.4.1-bin-hadoop2.4" 


sys.path.append("D:\python\spark-1.4.1-bin-hadoop2.4\python") 
sys.path.append("D:\python\spark-1.4.1-bin-hadoop2.4\python\lib\py4j-0.8.2.1-src.zip") 

try: 
    from pyspark import SparkContext 
    from pyspark import SparkConf 

    print ("success") 

except ImportError as e: 
    print ("error importing spark modules", e) 
    sys.exit(1) 
+0

tyvm,這工作完美。 – Haboryme

3

在Windows 10以下爲我工作。我使用設置添加下列環境變量>爲您的帳戶編輯環境變量:

SPARK_HOME=C:\Programming\spark-2.0.1-bin-hadoop2.7 
PYTHONPATH=%SPARK_HOME%\python;%PYTHONPATH% 

(改變「C:\程序\ ...」到您已經安裝了火花的文件夾)

2

對於Linux用戶,以下是在PYTHONPATH中包含pyspark libaray的正確(和非硬編碼)方法。兩個PATH份是必要的:

  1. 到pyspark Python模塊本身的路徑,和
  2. 到該pyspark模塊依靠當進口低於該壓縮

通知在壓縮庫的路徑庫版本是動態確定的,所以我們不會對其進行硬編碼。

export PYTHONPATH=${SPARK_HOME}/python/:$(echo ${SPARK_HOME}/python/lib/py4j-*-src.zip):${PYTHONPATH} 
+0

也是macOS的一個很好的解決方案。 – Kip

2

我在從cloudera yum包安裝的CentOS VM上運行Spark羣集。不得不設置以下變量來運行pyspark。

export SPARK_HOME=/usr/lib/spark; 
export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/lib/py4j-0.9-src.zip:$PYTHONPATH 
2
export PYSPARK_PYTHON=/home/user/anaconda3/bin/python 
export PYSPARK_DRIVER_PYTHON=jupyter 
export PYSPARK_DRIVER_PYTHON_OPTS='notebook' 

這是我做的用我的蟒蛇分佈的火花。 這是Spark版本獨立。 您可以將第一行更改爲用戶的python bin。 另外,從Spark 2.2.0開始,PySpark可作爲PyPi 上的獨立軟件包提供,但我尚未對其進行測試。

2

我有同樣的問題。

另外請確保您使用的是正確的Python版本,並且您正在使用正確的pip版本進行安裝。在我的情況下:我有Python 2.7和3.x. 我已經安裝了pyspark與

pip2.7安裝pyspark

和它的工作。

3

對於pyspark兩個組件火花的執行都需要共同努力:

  • pyspark Python包
  • 在星火實例的JVM

當啓動火花提交或pyspark事,這些腳本將兼顧兩者,即他們設置您的PYTHONPATH,PATH等,以便您的腳本可以找到pyspark,並且它們還會啓動spark實例,根據您的參數進行配置,例如--master X

或者,可以繞過這些腳本並直接在Python解釋器(如python myscript.py)中運行Spark應用程序。當火花腳本開始變得更加複雜並最終收到自己的參數時,這一點特別有趣。

  1. 確保可以通過Python解釋器找到pyspark軟件包。正如已經討論過的,要麼將spark/python目錄添加到PYTHONPATH中,要麼使用pip install直接安裝pyspark。
  2. 從腳本中設置spark實例的參數(那些用於傳遞給pyspark的參數)。
    • 對於火花配置爲你通常與--conf設置它們與配置對象(或字符串CONFIGS)在SparkSession.builder.config
    • 對於主選項中所定義(如--master,或 - -driver-mem),您可以通過寫入PYSPARK_SUBMIT_ARGS環境變量來設置它們。爲了使事情變得更清潔和更安全,您可以從Python內部進行設置,並且spark會在啓動時讀取它。
  3. 啓動實例,只需要您從構建器對象中調用getOrCreate()。因此

腳本可以有這樣的事情:

from pyspark.sql import SparkSession 

if __name__ == "__main__": 
    if spark_main_opts: 
     # Set main options, e.g. "--master local[4]" 
     os.environ['PYSPARK_SUBMIT_ARGS'] = spark_main_opts + " pyspark-shell" 

    # Set spark config 
    spark = (SparkSession.builder 
      .config("spark.checkpoint.compress", True) 
      .config("spark.jars.packages", "graphframes:graphframes:0.5.0-spark2.1-s_2.11") 
      .getOrCreate())