web-dev-qa-db-ja.com

spark-submitとpysparkの違いは何ですか?

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

my_script:

...
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で行うことができますか?

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

16
user592419
  1. sparkアプリケーションをビルドした場合、使用する必要があります スパーク送信 アプリケーションを実行する

    • コードはpython/scalaで記述できます

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

  2. 少数の個々のコマンドをテスト/実行するだけの場合は、使用できます シェル スパークによって提供された

    • pyspark(Pythonのsparkの場合)
    • spark-Shell(for spark in scala)
13
avrsanjay