java - 如何将空格分隔值作为单个参数传递以从 spark 执行 java 代码?
问题描述
全部,
更新
我正在尝试通过传递参数(参数将具有空格分隔值)从 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'\'''
我们该如何处理这个问题?你能帮我解决这个问题吗?
解决方案
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);
}
}
}
输出 #1(从命令行运行程序):
$ 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 脚本运行程序)
$ export arg1="Hello!"
$ export arg2="How are you doing"
$ export arg3=", buddy?"
$ export arg4="country='USA' AND state='New York'"
$ java ShowArgs "$arg1" "$arg2" "$arg3" "$arg4"
arg # 1 : Hello!
arg # 2 : How are you doing
arg # 3 : , buddy?
arg # 4 : country='USA' AND state='New York'
推荐阅读
- python - 文本不包含任何标记有“sel”tkinter 的字符
- visual-c++ - imrpot 指令的替代方案
- excel - 以编程方式创建动态工作表
- python - 对列表中的元素进行分组,以便每个种子产生唯一的组合
- ios - UIStackView 中标签的内容拥抱和压缩问题设置
- google-cloud-platform - 为 Integromat 设置 GCP VPC
- sql - 有没有办法使用 SQL 定义使用 2 个非唯一列的 2 个表之间的关系
- javascript - How can I share methods that call P5.js functions between two different sketches/canvases?
- nginx - 处理 nginx 中的 lua 错误并渲染 500 页面
- r - 如何使用 prop.table 创建数据集?