我试图通过bash脚本传递一个空格为./triggerSparkApp 'Premier League'
的字符串。
我是通过bash脚本以这种方式实现的;
if [ $@ -eq "${0}" ]
then
echo "No arguments"
else
spark-submit --master yarn-client --jars hive-hcatalog-core-0.13.0.jar spark-queries-1.0-SNAPSHOT-jar-with-dependencies.jar "${0}" --driver-memory 4g --executor-memory 2g --executor-cores
fi
参数应该在spark-submit之前传递--driver-memory。因为它正在返回:
[: too many arguments
我将不胜感激任何帮助。感谢
答案 0 :(得分:3)
我认为这就是你想要的:
if [ "$#" -eq 0 ]
then
echo "No arguments"
else
spark-submit --master yarn-client --jars \
hive-hcatalog-core-0.13.0.jar \
spark-queries-1.0-SNAPSHOT-jar-with-dependencies.jar \
"$1" --driver-memory 4g --executor-memory 2g --executor-cores
fi
$#
扩展为参数数量。第一个参数是$1
,而不是$0
,所以我在spark-submit
命令中替换了它。 \
延续仅供阅读。
我喜欢执行参数存在测试的另一种方法是:
if (($#))
then
spark-submit --master yarn-client --jars \
hive-hcatalog-core-0.13.0.jar \
spark-queries-1.0-SNAPSHOT-jar-with-dependencies.jar \
"$1" --driver-memory 4g --executor-memory 2g --executor-cores
else
echo "No arguments"
fi
(( ))
测试,当它包含一个计算结果为整数的表达式时,如果整数不为零则返回0(true),否则返回非零值(false)。
答案 1 :(得分:-1)
您需要在$@
周围使用引号,以避免分词。并使用==
进行字符串比较; 整数的-eq
。
if [ "$@" == "${1}" ]
then
echo "No arguments"
else
spark-submit ...
fi
或者,您可以使用不执行分词的[[ .. ]]
。