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.
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
Si vous voulez simplement tester/exécuter quelques commandes individuelles, vous pouvez utiliser le Coquille fourni par spark