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

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)



답변

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


답변

더러운 해결 방법 으로 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을 고수하십시오.


답변

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

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

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


답변