web-dev-qa-db-fra.com

Quelle est la différence entre spark-submit et pyspark?

Si je démarre pyspark puis exécute cette commande:

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

Tout va bien. Si, cependant, j'essaie de faire la même chose via la ligne de commande et spark-submit, j'obtiens une erreur:

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

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

Pourquoi cela arrive-t-il? Quelle est la différence entre l'exécution de pyspark et l'exécution de spark-submit qui provoquerait cette divergence? Et comment puis-je faire ce travail dans spark-submit?

EDIT: J'ai essayé d'exécuter cela à partir du shell bash en faisant pyspark my_script.py collapse ./data/ et j'ai eu la même erreur. La seule fois où tout fonctionne, c'est quand je suis dans un python Shell et que j'importe le script.

16
user592419
  1. Si vous avez créé une application spark, vous devez utiliser spark-submit pour exécuter l'application

    • Le code peut être écrit soit en python/scala

    • Le mode peut être soit local/cluster

  2. Si vous voulez simplement tester/exécuter quelques commandes individuelles, vous pouvez utiliser le Coquille fourni par spark

    • pyspark (pour spark en python)
    • spark-Shell (pour spark en scala)
13
avrsanjay