파이썬 셸에서 pyspark 가져 오기


111

이것은 답변이없는 다른 포럼에있는 다른 사람의 질문의 사본이므로 동일한 문제가 있으므로 여기서 다시 질문 할 것이라고 생각했습니다. ( http://geekple.com/blogs/feeds/Xgzu7/posts/351703064084736 참조 )

내 컴퓨터에 Spark가 제대로 설치되어 있으며 ./bin/pyspark를 Python 인터프리터로 사용할 때 오류없이 pyspark 모듈로 Python 프로그램을 실행할 수 있습니다.

그러나 일반 Python 셸을 실행하려고 할 때 pyspark 모듈을 가져 오려고하면이 오류가 발생합니다.

from pyspark import SparkContext

그리고 그것은 말한다

"No module named pyspark".

이 문제를 어떻게 해결할 수 있습니까? Python이 pyspark 헤더 / 라이브러리 / 등을 가리 키도록 설정해야하는 환경 변수가 있습니까? 내 Spark 설치가 / spark / 인 경우 어떤 pyspark 경로를 포함해야합니까? 아니면 pyspark 프로그램은 pyspark 인터프리터에서만 실행할 수 있습니까?


그들은 환경 변수를 변경하는 것이 "bin / spark-submit에 의해 매우 빠르게 무시되기 때문에 매우 효과적이지 않습니다."라고 말합니다. 아마도이 교환에서 뭔가를 배울 수있을 것입니다
emmagras 2014

답변:


97

다음은 간단한 방법입니다 (작동 방식에 대해 신경 쓰지 않으면 !!!).

findspark 사용

  1. 파이썬 셸로 이동

    pip install findspark
    
    import findspark
    findspark.init()
  2. 필요한 모듈 가져 오기

    from pyspark import SparkContext
    from pyspark import SparkConf
  3. 끝난!!!


다른 솔루션은 저에게 효과적이지 않았습니다. 내 프로그램에서 지금 findspark를 사용하고 있습니다. 문제에 대한 적절한 해결 방법처럼 보입니다.
Analytical Monk

차라리이 .. 할 필요가 없지만 헤이 .. 다른 일이 없으면 .. 내가 가져갈 게.
javadba 2016

51

이러한 오류가 인쇄되는 경우 :

ImportError : py4j.java_gateway라는 모듈이 없습니다.

$ SPARK_HOME / python / build를 PYTHONPATH에 추가하십시오.

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

9
다른 응답에 설명 된대로 stackoverflow.com/questions/26533169/... 나는 다음과 같은 수출 PYTHONPATH = $ SPARK_HOME를 추가했다 / 파이썬 / lib 디렉토리 / py4j-0.8.2.1-src.zip : $ PYTHONPATH
마이어 슨

46

pyspark bin이 LOADING python이고 올바른 라이브러리 경로를 자동으로로드하는 것으로 나타났습니다. $ SPARK_HOME / bin / 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, go figure. 폴더 이름은 다를 수 있습니다.
emmagras 2014

21

py 파일을 다음과 같이 실행 python filename.py 하지 마십시오. 대신 다음 을 사용하십시오.spark-submit filename.py


누군가가 이것을하지 않는 이유를 확장 할 수 있습니까? 나는이 질문을 조사했지만 지금까지 그 이유를 설명하는 것을 찾을 수 없었습니다.
Mint

@Mint 다른 답변은 이유를 보여줍니다. pyspark 패키지는 기본적으로 $ PYTHONPATH에 포함되지 않으므로 import pyspark명령 줄 또는 실행 된 스크립트에서 실패합니다. 당신은 a. 의도 한대로 spark-submit을 통해 pyspark를 실행하거나 b. $ PYTHONPATH에 $ SPARK_HOME / python을 추가합니다.
kingledion

또 다른 요점은 spark-submit은 셸 스크립트로, Spark를 사용하기 전에 시스템 환경을 올바르게 구성하는 데 도움이됩니다. python main.py 만 수행하면 시스템 환경을 올바르게 구성해야합니다 (예 : PYTHONPATH, SPARK_HOME
E.ZY).

21

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 셸을 실행할 때마다 입력하지 않으려면 .bashrc파일에 추가 할 수 있습니다.


1
내 설치 에서 libexec 디렉토리를 찾을 수 없습니다 Apache Spark.
Alberto Bonsanto 2015

@AlbertoBonsanto 죄송합니다. 나는이 문제에 직면하지 않았습니다. 그래서 아무 생각이 없습니다 :(
Dawny33

1
그래 그들은 불꽃 1.5.2에 libexec 디렉토리 폴더를 꺼내서
bluerubez

1
@bluerubez 스파크 1.6.2에있을 것 같습니다 ... 또한,하지 있는지 어떤 libexec/python/build디렉토리입니다 만, 불꽃 1.6.2은이 없습니다
OneCricketeer

17

Mac에서는 Homebrew를 사용하여 Spark (공식 "apache-spark")를 설치합니다. 그런 다음 Python 가져 오기가 작동하도록 PYTHONPATH를 다음과 같이 설정합니다.

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

Mac에서 "1.2.0"을 실제 apache-spark 버전으로 바꿉니다.


14

pyspark에서 Spark를 실행하려면 함께 작동하는 데 두 가지 구성 요소가 필요합니다.

  • pyspark 파이썬 패키지
  • JVM의 Spark 인스턴스

spark-submit 또는 pyspark로 항목을 시작할 때이 스크립트는 둘 다 처리합니다. 즉, 스크립트가 pyspark를 찾을 수 있도록 PYTHONPATH, PATH 등을 설정하고, 매개 변수에 따라 구성하여 Spark 인스턴스도 시작합니다. , 예 : --master X

또는 이러한 스크립트를 우회하고 .NET과 같은 Python 인터프리터에서 직접 Spark 애플리케이션을 실행할 수 있습니다 python myscript.py. 이것은 스파크 스크립트가 더 복잡해지기 시작하고 결국 자체 인수를받을 때 특히 흥미 롭습니다.

  1. Python 인터프리터에서 pyspark 패키지를 찾을 수 있는지 확인합니다. 이미 논의했듯이 PYTHONPATH에 spark / python dir을 추가하거나 pip install을 사용하여 pyspark를 직접 설치합니다.
  2. 스크립트에서 스파크 인스턴스의 매개 변수를 설정합니다 (pyspark에 전달되는 데 사용 된 것).
    • 일반적으로 --conf로 설정하는 스파크 구성의 경우 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())

9

을 제거하려면 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)

7

Windows 10에서는 다음이 저에게 효과적이었습니다. 계정에 대한 설정 > 환경 변수 편집을 사용하여 다음 환경 변수를 추가했습니다 .

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

( "C : \ Programming \ ..."을 Spark를 설치 한 폴더로 변경)


5

Linux 사용자의 경우 다음은 PYTHONPATH에 pyspark libaray를 포함하는 올바른 (하드 코딩되지 않은) 방법입니다. 두 PATH 부분이 모두 필요합니다.

  1. pyspark Python 모듈 자체에 대한 경로
  2. 가져올 때 pyspark 모듈이 의존하는 압축 라이브러리의 경로

아래에서 압축 된 라이브러리 버전은 동적으로 결정되므로 하드 코딩하지 않습니다.

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

4

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

4
export PYSPARK_PYTHON=/home/user/anaconda3/bin/python
export PYSPARK_DRIVER_PYTHON=jupyter
export PYSPARK_DRIVER_PYTHON_OPTS='notebook'

이것이 Spark와 함께 Anaconda 배포판을 사용하기 위해 수행 한 작업입니다. 이것은 Spark 버전에 독립적입니다. 첫 번째 줄을 사용자의 python bin으로 변경할 수 있습니다. 또한 Spark 2.2.0부터 PySpark는 PyPi에서 독립 실행 형 패키지로 사용할 수 있지만 아직 테스트하지 않았습니다.


4

다음과 같이 (PIP를 사용하여 pyspark를 설치 한 경우) pyspark path파이썬에서 가져올 수 있습니다.pip

pip show pyspark

3

나는 같은 문제가 있었다.

또한 올바른 Python 버전을 사용하고 있고 올바른 pip 버전으로 설치하고 있는지 확인하십시오. 제 경우에는 파이썬 2.7과 3.x가 모두있었습니다. pyspark를 설치했습니다.

pip2.7 pyspark 설치

그리고 그것은 작동했습니다.


2

제출하려는 Python 스크립트가 pyspark.py ( facepalm ) 이기 때문에이 오류가 발생했습니다 . 수정 사항은 위에서 권장 한대로 내 PYTHONPATH를 설정 한 다음 스크립트 이름을 pyspark_test.py로 변경하고 내 스크립트의 원래 이름을 기반으로 생성 된 pyspark.pyc를 정리하여이 오류를 해결하는 것입니다.


2

DSE (DataStax Cassandra & Spark)의 경우 PYTHONPATH에 다음 위치를 추가해야합니다.

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

그런 다음 dse pyspark를 사용하여 경로에서 모듈을 가져옵니다.

dse pyspark

2

나는 이와 동일한 문제가 있었고 위의 제안 된 솔루션에 한 가지를 추가 할 것입니다. Mac OS X에서 Homebrew를 사용하여 Spark를 설치할 때 경로에 libexec를 포함하도록 py4j 경로 주소를 수정해야합니다 (Py4j 버전을 보유한 버전으로 변경해야 함).

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

참고-압축을 풀고 py4j폴더 만 사용했지만 작동하지 않았습니다. zip 파일 ... 사용
엘 야

2

제 경우에는 다른 python dist_package (python 3.5)에 설치되었지만 python 3.6을 사용하고 있었으므로 아래 도움이되었습니다.

python -m pip install pyspark

1

Alpine을 OS로 사용하여 Docker 컨테이너를 만들고 Python 및 Pyspark를 패키지로 설치할 수도 있습니다. 그것은 모든 것을 컨테이너화 할 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.