Was ist der Unterschied zwischen spark-submit und pyspark?

Wenn ich pyspark starte und dann diesen Befehl ausführe:

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

Alles ist A-ok. Wenn ich jedoch versuche, dasselbe über die Kommandozeile und mit Spark-Submit zu tun, erhalte ich eine Fehlermeldung:

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

Warum passiert dies? Was ist der Unterschied zwischen Pyspark und Spark Submit, der diese Divergenz verursachen würde? Und wie kann ich diese Arbeit in Spark-Submit machen?

EDIT: Ich habe versucht, dies von der Bash-Shell aus auszuführen, indem ichpyspark my_script.py collapse ./data/ und ich habe den gleichen Fehler bekommen. Alles funktioniert nur, wenn ich mich in einer Python-Shell befinde und das Skript importiere.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage