如何将空格分隔的值作为单个参数传递以执行spark的java代码?

如何将空格分隔的值作为单个参数传递以执行spark的java代码?,java,apache-spark,Java,Apache Spark,全部, 更新 我试图通过传递参数(参数将具有空格分隔的值)从spark执行java代码。 e、 g 我的代码如下所示: 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.exec

全部,

更新 我试图通过传递参数(参数将具有空格分隔的值)从spark执行java代码。 e、 g

我的代码如下所示:

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
通过sh-x执行shell脚本时,我确实在命令行中看到了arg4的值,如下所示

'country='\''USA'\'' AND '\''state=NEWYORK'\'''

我们如何处理这个问题?您能帮我解决这个问题吗。

我们必须向main类传递以空格分隔的参数,您能像下面这样传递参数吗

--class "<java class>" <jar file> arg1 arg2 arg3 "country='USA' AND state='Newyork'"


我们必须将以空格分隔的参数传递给main类,您可以尝试像下面这样传递参数吗

--class "<java class>" <jar file> arg1 arg2 arg3 "country='USA' AND state='Newyork'"


Java将双引号(“)之间的所有单词集视为一个字符串。 因此,使用双引号将允许将空格分隔的单词列表作为一个参数进行读取

这里有一个工作演示:

// File name:  ShowArgs.java

public class ShowArgs {
    public static void main (String[] args) {
        int count = 0;
        for (String s: args) {
            count++;
            System.out.println("arg # " + count + " : " + s);
        }
    }
}
$ javac ShowArgs.java

$ java ShowArgs arg1 arg2 arg3 "country='USA' AND state='Newyork'"

arg # 1 : arg1
arg # 2 : arg2
arg # 3 : arg3
arg # 4 : country='USA' AND state='Newyork'
输出#1(从命令行运行程序):

// File name:  ShowArgs.java

public class ShowArgs {
    public static void main (String[] args) {
        int count = 0;
        for (String s: args) {
            count++;
            System.out.println("arg # " + count + " : " + s);
        }
    }
}
$ javac ShowArgs.java

$ java ShowArgs arg1 arg2 arg3 "country='USA' AND state='Newyork'"

arg # 1 : arg1
arg # 2 : arg2
arg # 3 : arg3
arg # 4 : country='USA' AND state='Newyork'
输出#2(通过shell脚本运行程序)


Java将双引号(“)之间的所有单词集视为一个字符串。 因此,使用双引号将允许将空格分隔的单词列表作为一个参数进行读取

这里有一个工作演示:

// File name:  ShowArgs.java

public class ShowArgs {
    public static void main (String[] args) {
        int count = 0;
        for (String s: args) {
            count++;
            System.out.println("arg # " + count + " : " + s);
        }
    }
}
$ javac ShowArgs.java

$ java ShowArgs arg1 arg2 arg3 "country='USA' AND state='Newyork'"

arg # 1 : arg1
arg # 2 : arg2
arg # 3 : arg3
arg # 4 : country='USA' AND state='Newyork'
输出#1(从命令行运行程序):

// File name:  ShowArgs.java

public class ShowArgs {
    public static void main (String[] args) {
        int count = 0;
        for (String s: args) {
            count++;
            System.out.println("arg # " + count + " : " + s);
        }
    }
}
$ javac ShowArgs.java

$ java ShowArgs arg1 arg2 arg3 "country='USA' AND state='Newyork'"

arg # 1 : arg1
arg # 2 : arg2
arg # 3 : arg3
arg # 4 : country='USA' AND state='Newyork'
输出#2(通过shell脚本运行程序)


使用双引号
“country='USA'和state='Newyork'”
不起作用?@patrickhen,是的,它不起作用
——class“arg1,arg2,arg3,arg4”
(所有包含空格的参数都用双引号引出来)。您能在此处发布错误消息吗?&同时发布您的主要方法您是如何读取参数的?使用双引号“country='USA'和state='Newyork'不起作用?@PatrickChen,是的,它不起作用
--class”“arg1,arg2,arg3,arg4”
(双引号所有包含空格的参数)。您能在此处发布错误消息吗?&同时发布你的主要方法你是如何阅读参数的?对不起,这里有空格分隔的参数。它不起作用了。我已经从shell脚本中调用了所有这些内容。你能发布你的shell脚本吗?我已经更新了答案,并尝试将所有参数都放在引号中-“$arg1”“$arg2”“$arg3”“$arg4”抱歉,参数之间用空格分隔。它不起作用了。我已经从shell脚本中调用了所有这些内容。你能发布你的shell脚本吗?我已经更新了答案,并尝试将你的所有参数放在引号中-“$arg1”“$arg2”“$arg3”“$arg4”