42

我正在尝试使用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

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

4

5 回答 5

54

即使sys.argv是一个很好的解决方案,我仍然更喜欢在我的 PySpark 作业中处理行命令 args 的这种更合适的方法:

import argparse

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

这样,您可以按如下方式启动您的工作:

spark-submit job.py --ngrams 3

关于模块的更多信息argparse可以在Argparse 教程中找到

于 2016-05-27T13:18:58.517 回答
44

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

#import sys
print sys.argv

如果你跑

spark-submit args.py a b c d e 

你会看见:

['/spark/args.py', 'a', 'b', 'c', 'd', 'e']
于 2015-08-26T02:50:08.577 回答
2

您可以从 spark-submit 命令传递参数,然后通过以下方式在代码中访问它们,

sys.argv[1] 会给你第一个参数, sys.argv[2] 第二个参数等等。参考下面的例子,

您可以创建如下代码来获取您将在 spark-submit 命令中传递的参数,

import os
import sys

n = int(sys.argv[1])
a = 2
tables = []
for _ in range(n):
    tables.append(sys.argv[a])
    a += 1
print(tables)

将上述文件另存为 PysparkArg.py 并执行以下 spark-submit 命令,

spark-submit PysparkArg.py 3 table1 table2 table3

输出:

['table1', 'table2', 'table3']

这段代码可用于 PySpark 作业,其中需要从数据库中获取多个表,并且要获取的表数和表名将由用户在执行 spark-submit 命令时给出。

于 2019-09-19T16:14:11.463 回答
1

啊,有可能。http://caen.github.io/hadoop/user-spark.html

spark-submit \
    --master yarn-client \   # Run this as a Hadoop job
    --queue <your_queue> \   # Run on your_queue
    --num-executors 10 \     # Run with a certain number of executors, for example 10
    --executor-memory 12g \  # Specify each executor's memory, for example 12GB
    --executor-cores 2 \     # Specify each executor's amount of CPUs, for example 2
    job.py ngrams/input ngrams/output
于 2015-08-26T02:45:22.583 回答
1

Aniket Kulkarnispark-submit args.py a b c d e似乎就足够了,但值得一提的是,我们遇到了可选/命名参数(例如 --param1)的问题。

似乎双破折号--将有助于表明python可选参数如下:

spark-submit --sparkarg xxx yourscript.py -- --scriptarg 1 arg1 arg2
于 2020-02-20T01:17:00.647 回答