20

pyspark を起動してから次のコマンドを実行すると:

import my_script; spark = my_script.Sparker(sc); spark.collapse('./data/')

すべて問題ありません。ただし、コマンドラインと spark-submit を使用して同じことを実行しようとすると、エラーが発生します。

Command: /usr/local/spark/bin/spark-submit my_script.py collapse ./data/
  File "/usr/local/spark/python/pyspark/rdd.py", line 352, in func
    return f(iterator)
  File "/usr/local/spark/python/pyspark/rdd.py", line 1576, in combineLocally
    merger.mergeValues(iterator)
  File "/usr/local/spark/python/pyspark/shuffle.py", line 245, in mergeValues
    for k, v in iterator:
  File "/.../my_script.py", line 173, in _json_args_to_arr
    js = cls._json(line)
RuntimeError: uninitialized staticmethod object

私のスクリプト:

...
if __name__ == "__main__":
    args = sys.argv[1:]
    if args[0] == 'collapse':
        directory = args[1]
        from pyspark import SparkContext
        sc = SparkContext(appName="Collapse")
        spark = Sparker(sc)
        spark.collapse(directory)
        sc.stop()

なぜこうなった?この相違を引き起こす pyspark の実行と spark-submit の実行の違いは何ですか? そして、どうすればこれをspark-submitで機能させることができますか?

編集:これを実行してbashシェルから実行しようとしましたpyspark my_script.py collapse ./data/が、同じエラーが発生しました。すべてが機能するのは、Python シェルでスクリプトをインポートしたときだけです。

4

3 に答える 3

24
  1. spark アプリケーションを作成した場合は、spark-submitを使用してアプリケーションを実行する必要があります

    • コードは python/scala のいずれかで記述できます

    • モードは、ローカル/クラスターのいずれかです

  2. 個々のコマンドをいくつかテスト/実行するだけの場合は、spark が提供するシェルを使用できます。

    • pyspark (python のスパーク用)
    • spark-shell (scala の spark 用)
于 2016-09-21T14:29:41.680 に答える
1

pyspark コマンドは REPL (read–eval–print loop) であり、いくつかの PySpark コマンドをテストするために対話型シェルを開始するために使用されます。これは、開発時に使用されます。ここでは Python について説明します。

Scala または Python で記述された spark アプリケーションをクラスター上またはローカルで実行するには、spark-submit を使用できます。

于 2020-10-10T04:01:35.727 に答える