2014-11-04 65 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