spark 2.4.4를 설치 한 후 pyspark를 실행하려고 할 때 'TypeError : integer is required (got type bytes)'오류 수정 방법


16

OpenJDK 13.0.1 및 python 3.8 및 spark 2.4.4를 설치했습니다. 설치를 테스트하기위한 지시 사항은 spark 설치 루트에서. \ bin \ pyspark를 실행하는 것입니다. 환경 변수 설정과 같은 스파크 설치 단계를 놓쳤는 지 확실하지 않지만 자세한 지침을 찾을 수 없습니다.

내 컴퓨터에서 파이썬 인터프리터를 실행할 수 있으므로 올바르게 설치되어 있고 "java -version"을 실행하면 예상되는 응답을 얻을 수 있다고 확신하므로 문제 중 하나에 문제가 있다고 생각하지 않습니다.

cloudpickly.py에서 오류의 스택 추적을 얻습니다.

Traceback (most recent call last):
  File "C:\software\spark-2.4.4-bin-hadoop2.7\bin\..\python\pyspark\shell.py", line 31, in <module>
    from pyspark import SparkConf
  File "C:\software\spark-2.4.4-bin-hadoop2.7\python\pyspark\__init__.py", line 51, in <module>
    from pyspark.context import SparkContext
  File "C:\software\spark-2.4.4-bin-hadoop2.7\python\pyspark\context.py", line 31, in <module>
    from pyspark import accumulators
  File "C:\software\spark-2.4.4-bin-hadoop2.7\python\pyspark\accumulators.py", line 97, in <module>
    from pyspark.serializers import read_int, PickleSerializer
  File "C:\software\spark-2.4.4-bin-hadoop2.7\python\pyspark\serializers.py", line 71, in <module>
    from pyspark import cloudpickle
  File "C:\software\spark-2.4.4-bin-hadoop2.7\python\pyspark\cloudpickle.py", line 145, in <module>
    _cell_set_template_code = _make_cell_set_template_code()
  File "C:\software\spark-2.4.4-bin-hadoop2.7\python\pyspark\cloudpickle.py", line 126, in _make_cell_set_template_code
    return types.CodeType(
TypeError: an integer is required (got type bytes)

답변:


44

파이썬 3.8을 사용하고 있기 때문에 이런 일이 발생합니다. pyspark의 최신 pip 릴리스 (작성 시점에 pyspark 2.4.4)는 python 3.8을 지원하지 않습니다. 지금은 파이썬 3.7로 다운 그레이드하면 괜찮을 것입니다.


고마워요, 대단합니다!
— Chris

이것은 나를 위해 작동하지 않았다 3.7.6으로 다운 그레이드
— user2331566

1
pyspark 2.4.4가 python3.7.5에서 작동하고 있음을 확인할 수 있습니다.
— mork

python 3.7.0을 사용하는 신선한 콘다 환경이 작동하는지 확인할 수 있습니다! 감사.
— J. Offenberg

3.7.7이 작동
— 하는지

1

더러운 해결 방법 으로 docstring 함수에서 제안한_cell_set_template_code Python3 전용 구현으로를 대체 할 수 있습니다 ._make_cell_set_template_code

Notes
-----
In Python 3, we could use an easier function:

.. code-block:: python

   def f():
       cell = None

       def _stub(value):
           nonlocal cell
           cell = value

       return _stub

    _cell_set_template_code = f()

spark v2.4.5 패치는 다음과 같습니다. https://gist.github.com/ei-grad/d311d0f34b60ebef96841a3a39103622

다음에 의해 적용하십시오 :

git apply <(curl https://gist.githubusercontent.com/ei-grad/d311d0f34b60ebef96841a3a39103622/raw)

이것은 ./bin/pyspark의 문제점을 수정하지만 ./bin/spark-submit은 고유 한 cloudpickle.py 사본과 함께 번들로 제공되는 pyspark.zip을 사용합니다. 그리고 거기에서 수정되면 여전히 작동하지 않고에서 일부 객체를 선택 해제하는 동안 동일한 오류로 실패합니다 pyspark/serializers.py.

그러나 Python 3.8 지원이 이미 v3.0.0-preview2에 도달 한 것으로 보이므로 시도해 볼 수 있습니다. 또는 받아 들인 대답에서 알 수 있듯이 Python 3.7을 고수하십시오.


0

다음 명령을 사용하여 python 3.8 과 호환 가능한 최신 버전의 pyinstaller 를 설치하십시오 .

pip install https://github.com/pyinstaller/pyinstaller/archive/develop.tar.gz

참조 :
https://github.com/pyinstaller/pyinstaller/issues/4265


1
나는 이런 짓을하고 pyspark여전히 같은 오류 준다
— javadba을

여기도 마찬가지입니다. 동일한 오류 메시지 인 경우에도 다른 문제인 것 같습니다. OP의 문제는에서 발생합니다 pyspark\cloudpickle.py. PyInstaller 문제는에서 발생합니다 PyInstaller\building\utils.py.
— 스티븐
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.