全部,
更新
我试图通过传递参数来执行spark的java代码(参数将具有空格分隔的值)。例如
arg4 = "country='USA' AND state='Newyork'"
我的代码如下:
spark-submit --jars <path>/spark-sql-kafka-0-10_2.11-2.3.0.jar \
--driver-java-options "-Djava.security.auth.login.config=<path>/devjaas.conf" \
--conf "spark.executor.extraJavaOptions=-Djava.security.auth.login.config=./jaas_hdfs_dev.conf" \
--master yarn \
--deploy-mode client \
--files <path>/jaas_hdfs_dev.conf,<credential> \
--executor-memory 10g \
--executor-cores 5 \
--driver-cores=5 \
--driver-memory=10G \
--conf spark.executor.cores=5 \
--conf spark.yarn.am.cores=5 \
--conf spark.yarn.am.memory=15g \
--conf spark.executor.memoryOverhead=4096 \
--class "<java class>" <jar file> $arg1 $arg2 $arg3 $arg4
这是作为错误抛出的,因为arg4有空间,并且代码不能将arg4的值视为单个参数。我正在shell脚本中执行spark代码,我已将所有值传递给shell脚本中的变量。
arg1= "first"
arg2="second"
arg3="third"
arg4="country='USA' AND state='Newyork'"
在通过sh-x执行shell脚本时,我确实看到命令行中arg4的值如下
'country='\''USA'\'' AND '\''state=NEWYORK'\'''
我们如何处理这个问题?你能帮我解决这个问题吗。
2条答案
按热度按时间busg9geu1#
java将双引号(“)之间的所有单词集视为一个字符串。因此,使用双引号可以将空格分隔的单词列表作为一个参数来读取。
下面是一个工作演示:
输出#1(从命令行运行程序):
输出#2(通过shell脚本运行程序)
ldxq2e6h2#
我们必须向主类传递用空格分隔的参数,您可以尝试如下传递参数。
如果加逗号
,
在参数之间,主类将把这些参数作为单个值处理,直到找到空间为止。尽量把你的论点放在引号里。就像下面一样。