我提交spark job时可以为python代码添加参数吗?

Jin*_*Yoo 27 python apache-spark cluster-mode

我正在尝试用来spark-submit在spark集群中执行我的python代码.

通常我们spark-submit使用如下的python代码运行.

# Run a Python application on a cluster
./bin/spark-submit \
  --master spark://207.184.161.138:7077 \
  my_python_code.py \
  1000
Run Code Online (Sandbox Code Playgroud)

但我想my_python_code.py通过传递几个参数来运行是否有聪明的方法来传递参数?

nol*_*eto 32

即使sys.argv是一个成功的解决方案,我更喜欢这种方法来处理我的Spark作业中的行命令args:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument("--ngrams", help="some useful description.")
args = parser.parse_args()
if args.ngrams:
    ngrams = args.ngrams
Run Code Online (Sandbox Code Playgroud)

然后按如下方式启动您的工作:

spark-submit job.py --ngrams 3
Run Code Online (Sandbox Code Playgroud)

有关argparse模块的更多信息,请参阅Argparse教程

  • 有人知道如何将 Pyspark 与 argparse 一起使用吗?我不断收到错误“无法识别的标志 --arg1”,这让我发疯!(Spark 2.4.4 和 Python 3.6) (4认同)
  • 不工作!结果显示“[TerminalIPythonApp] CRITICAL | 无法识别的标志:'--ngrams'” (3认同)

Pau*_*aul 29

:将其放在名为args.py的文件中

#import sys
print sys.argv
Run Code Online (Sandbox Code Playgroud)

如果你跑

spark-submit args.py a b c d e 
Run Code Online (Sandbox Code Playgroud)

你会看见:

['/spark/args.py', 'a', 'b', 'c', 'd', 'e']
Run Code Online (Sandbox Code Playgroud)