web-dev-qa-db-ja.com

pythonを送信するときにコードに引数を追加できますかspark job?

pythonクラスターでsparkコードを実行するためにspark-submitを使用しようとしています。

通常、以下のようなpythonコードでspark-submitを実行します。

# 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を実行したい引数を渡すスマートな方法はありますか?

26
Jinho Yoo

はい:これをargs.pyというファイルに入れます

#import sys
print sys.argv

走ったら

spark-submit args.py a b c d e 

表示されます:

['/spark/args.py', 'a', 'b', 'c', 'd', 'e']
28
Paul

たとえ sys.argvは良い解決策ですが、PySparkジョブで行コマンド引数を処理するこのより適切な方法が今でも好まれています。

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チュートリアル を参照してください。

28
noleto

ああ、それは可能です。 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
0
Jinho Yoo