在具有特定目录输入的 shell 脚本中声明 spark 提交(python 脚本)的预期标记是什么?

What is expected token for declare spark submit (python script) in shell script with specific directory input?

总结:

在具有特定目录输入的 shell 脚本中声明 spark 提交(python 脚本)的预期标记是什么?我应该使用什么标点符号?

我已经尝试了 < ,但它不起作用

详情:

我尽量详细介绍我的情况,以了解我的情况。我的输入在

sys.argv[1] 对于 dataset_1dataset_2dataset_3

sys.argv[2] 对于 dataset_4

sys.argv[3] 对于 dataset_5

sys.argv[4] 对于 dataset_6

我的输出

sys.argv[5]

中的额外输入

sys.argv[6]

sys.argv[7] 一个月

这是脚本的一部分,文件名为cs_preDeploy.py

import os
import sys

#/tmp/sdsid/encrypted_dataset/ae80ead7-bcf1-43ca-a888-03f6ba48f4b9/0/dataset_1/year=2021/month=1
input_path_1 = os.path.join(sys.argv[1], 'dataset_1')

#/tmp/sdsid/encrypted_dataset/ae80ead7-bcf1-43ca-a888-03f6ba48f4b9/0/dataset_2/year=2021/month=1
input_path_2 = os.path.join(sys.argv[1], 'dataset_2')

#/tmp/sdsid/encrypted_dataset/ae80ead7-bcf1-43ca-a888-03f6ba48f4b9/0/dataset_3/year=2021/month=1
input_path_3 = os.path.join(sys.argv[1], 'dataset_3')

# /tmp/sdsid/encrypted_dataset/328b7446-1862-4489-b1b4-57fa55fe556a/0/dataset_4/year=2021/month=2
input_path_4 = os.path.join(sys.argv[2], 'dataset_4')

# /tmp/sdsid/encrypted_dataset/3119bdd9-c7a8-44c3-b3f8-e49a86261106/0/dataset_5/year=2021/month=2
input_path_5 = os.path.join(sys.argv[3], 'dataset_5')

# /tmp/sdsid/encrypted_dataset/efc84a0f-52e9-4dff-91a1-56e1d7aa02cb/0/dataset_6/year=2021/month=2
input_path_6 = os.path.join(sys.argv[4], 'dataset_6')

output_path = sys.argv[5]

#query_year = sys.argv[6]
#query_month = sys.argv[7]
#For looping year month

if len(sys.argv) > 7:
    year = int(sys.argv[6]) # year
    month = int(sys.argv[7]) # month
else:
    month_obs = datetime.datetime.today()
    month = month_obs.month
    year = month_obs.year

这是我的第一次尝试

[sdsid@user algorithm]$ PYSPARK_PYTHON=/usr/bin/python3 ./bin/spark-submit \
> --master yarn \
> --deploy-mode cluster \
> --driver-memory 16g \
> --executor-memory 16g \
> --num-executors 5 \
> --executor-cores 1 \
> ./home/sdsid/algorithm/cs_preDeploy.py

输出

-bash: ./bin/spark-submit: No such file or directory

这是第二次尝试,我将 sys.argv[6] 的年份参数设置为 2021,sys.argv[7] 设置为 7(七月)

[sdsid@user algorithm]$ nohup spark-sumbit cs_preDeploy.py </tmp/sdsid/sample_dataset/></tmp/sdsid/sample_dataset/dataset_4></tmp/sdsid/sample_dataset/dataset_5></tmp/sdsid/sample_dataset/dataset_6></tmp/sdsid/sample_output/dataset_output/> 2021 7

错误信息

-bash: syntax error near unexpected token `<'

第三次尝试

[sdsid@user algorithm]$ nohup spark-sumbit cs_preDeploy.py <"/tmp/sdsid/sample_dataset/"><"/tmp/sdsid/sample_dataset/dataset_4"><"/tmp/sdsid/sample_dataset/dataset_5"><"/tmp/sdsid/sample_dataset/dataset_6"><"/tmp/sdsid/sample_output/dataset_output/"> 2021 7

错误信息

-bash: syntax error near unexpected token `<'
  • -bash: ./bin/spark-submit: No such file or directory
    一种。将完整路径放在这里,如 /folder1/folder2/bin/spark-submit as as ./ 表示当前目录并且取决于您现在所在的位置,这样的路径可能不存在。

    b.Or 将 spark submit 添加到 PATH 这样你就可以 运行 没有路径的 spark-submit

  • -bash: syntax error near unexpected token `<'
    使用引号传递参数,因为 '<>' 是特殊字符:
    spark-sumbit cs_preDeploy.py '<"/tmp/sdsid/sample_dataset/">' 2021 7
    如果字符串中有双引号 "",请使用单引号 ''
    spark-sumbit cs_preDeploy.py '<param with special characters>' 2021 7
    如果
    中有变量,请使用带转义符的双引号 \ spark-sumbit cs_preDeploy.py "$Variable plus some quotes \" inside \" " 2021 7

  • 请参考link如何提交应用到运行py spark,这里有很多例子