2014-11-04 67 views
7

如果我启动pyspark,然后运行这个命令:spark-submit和pyspark有什么区别?

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

一切都OK。但是,如果我尝试通过命令行做同样的事情,引发提交,我得到一个错误:

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 shell,我得到了同样的错误。当一切正常时唯一的一次是当我在一个python shell中并导入脚本时。

回答

2

pyspark-submit将您的代码发送给集群中的工作人员执行。

检查:http://spark.apache.org/docs/latest/submitting-applications.html

+3

你的意思是spark-submit不是pyspark-submit。此外,这也解释了spark-submit的作用,但这不是问题。问题是关于spark-submit和pyspark之间的区别。 avrsanjay的回答是一个答案。 – 2016-10-19 07:35:45

+1

没有像pyspark-submit – 2017-07-10 14:54:27

7
  1. 如果你建立了一个火花的应用程序,你需要使用火花提交运行应用程序

    • 的代码可以写无论是在蟒蛇/ scala

    • 该模式可以是本地/群集

  2. 如果你只是想测试/运行几个独立的命令,你可以使用火花提供

    • pyspark(在蟒蛇火花)
    • 火花外壳(用于spark in scala)
+0

pyspark这样的东西只支持使用Yarn部署的集群模式。 Mesos和独立不支持集群模式。 – 2016-09-27 17:13:42

+0

[pyspark](https://spark.apache.org/docs/0.9.0/python-programming-guide.html)文档说它也支持独立。如果我在这里丢失了一些东西,请纠正。 – avrsanjay 2016-09-27 18:19:35

+0

pyspark支持独立于所谓的“本地模式”,这意味着驱动程序在提交作业的机器上运行。 只有Yarn不幸地支持pyspark的集群模式。 – 2016-09-28 12:49:13