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を実行することです。いくつかの環境変数の設定など、sparkのインストールの手順を逃したかどうかはわかりませんが、それ以上の詳細な手順は見つかりません。

私は自分のマシンでpythonインタープリターを実行できるので、正しくインストールされ、「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

これは、Python 3.8を使用しているために発生しています。pysparkの最新のpipリリース(執筆時のpyspark 2.4.4)は、python 3.8をサポートしていません。当面はpython 3.7にダウングレードしてください。問題はありません。


ありがとう、これは素晴らしいです!
Chris、

これは機能しません
でした。3.7.6に

1
私はpython3.7.5と私のために働いている2.4.4 pyspark確認することができます
モルク

Python 3.7.0の新しいconda環境が機能することを確認できます!ありがとう。
J.オッフェンベルク

3.7.7が働いていることを確認
kolistivra

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()

ここでは、スパーク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を使用します。そして、そこで修正されると、それでも機能せず、で一部のオブジェクトをunpickleするときに同じエラーで失敗します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.