簡體   English   中英

spark-submit 和 pyspark 有什么區別?

[英]What is the difference between spark-submit and pyspark?

如果我啟動 pyspark 然后運行以下命令:

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

一切都很好。 但是,如果我嘗試通過命令行和 spark-submit 執行相同的操作,則會收到錯誤消息:

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

我的腳本:

...
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 中並導入腳本時。

  1. 如果您構建了一個 spark 應用程序,則需要使用spark-submit來運行該應用程序

    • 代碼可以用python/scala編寫

    • 模式可以是本地/集群

  2. 如果你只想測試/運行幾個單獨的命令,你可以使用 spark 提供的shell

    • pyspark(用於python中的spark)
    • spark-shell(用於 scala 中的 spark)

spark-submit是一個將您的 spark 程序(或作業)提交到 Spark 集群的實用程序。 如果您打開 spark-submit 實用程序,它最終會調用 Scala 程序

org.apache.spark.deploy.SparkSubmit 

另一方面, pysparkspark-shell是 REPL(讀取-評估-打印循環)實用程序,它允許開發人員在編寫時運行/執行他們的 Spark 代碼,並且可以即時評估。

最終,它們都在幕后運行一個作業,如果您使用以下命令,大多數選項是相同的

spark-submit --help
pyspark --help
spark-shell --help

spark-submit有一些額外的選項可以將你的 spark 程序(scala 或 python)作為一個包(python 的 jar/zip)或單獨的 .py 或 .class 文件。

spark-submit --help
Usage: spark-submit [options] <app jar | python file | R file> [app arguments]
Usage: spark-submit --kill [submission ID] --master [spark://...]
Usage: spark-submit --status [submission ID] --master [spark://...]

它們還提供了一個 WebUI 來跟蹤 Spark 作業進度和其他指標。

當您使用 Ctrl+c 終止 spark-shell(pyspark 或 spark-shell)時,spark 會話將終止,WebUI 無法再顯示詳細信息。

如果您查看 spark-shell,它還有一個附加選項可以使用 -I 逐行運行腳本

Scala REPL options:
  -I <file>                   preload <file>, enforcing line-by-line interpretation

pyspark 命令是 REPL(讀取-評估-打印循環),用於啟動交互式 shell 以測試一些 PySpark 命令。 這在開發期間使用。 我們在這里談論 Python。

要在集群上或本地運行用 Scala 或 Python 編寫的 Spark 應用程序,您可以使用 spark-submit。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM