在Java中将JSON参数作为livy参数发送

在Java中将JSON参数作为livy参数发送,java,apache-spark,livy,Java,Apache Spark,Livy,我正试图通过livy提交一份有火花的工作。 在作业中,我需要在调用livy时在args参数中发布json数据 String payload = "{\"name\": \"myname\", \"id\": \"101\"}"; String data="{ \"file\":\"hdfs://some.jar\" ,\"className\":\"someclass\",\"args\":["+"\""+payload+"\""+"], \"proxyUser\":\"clsadmin\"}"

我正试图通过livy提交一份有火花的工作。 在作业中,我需要在调用livy时在args参数中发布json数据

String payload = "{\"name\": \"myname\", \"id\": \"101\"}";
String data="{ \"file\":\"hdfs://some.jar\" ,\"className\":\"someclass\",\"args\":["+"\""+payload+"\""+"], \"proxyUser\":\"clsadmin\"}";
String[] command = {"curl", "-v","-g", "-u" ,"id:pwd", "-H", "Content-Type:application/json" ,  "-H", "X-Requested-By:livy" , url ,"--data", data};
它不起作用。 现在如果我把我的有效载荷改成这个,它会工作的

String payload = "{\\\"name\\\": \\\"myname\\\", \\\"id\\\": \\\"101\\\"}";
如何避免在有效负载中使用3个反斜杠?有没有更好的办法。 我使用curl调用livy url

Process p = process.start();
BufferedReader reader =  new BufferedReader(new InputStreamReader(p.getInputStream()));
StringBuilder builder = new StringBuilder();
String line = null;
while ( (line = reader.readLine()) != null) 
{
    builder.append(line);
    builder.append(System.getProperty("line.separator"));
}

在Livy rest API中,args是应用程序的命令行参数。它基本上是一个字符串数组,但在您的场景中,您传递的是一个json数组。下面是spark submit命令和rest API调用中的args参数的示例

spark-submit --class className hdfs://some.jar myname 101

args : [ "myname", "101" ]

在Livy rest API中,args是应用程序的命令行参数。它基本上是一个字符串数组,但在您的场景中,您传递的是一个json数组。下面是spark submit命令和rest API调用中的args参数的示例

spark-submit --class className hdfs://some.jar myname 101

args : [ "myname", "101" ]

但是在这里,我如何提到参数的名称呢?使用此命令时,我只能以args形式发送参数的值?对我来说,命令行参数是json数据。我如何发送该数据?json在数据中始终有空格,并且命令行参数是以空格分隔的。您是否能够在spark submit中将json作为命令行参数发送?或者,您可以在命令行中使用冒号或“=”分隔值,并在类中以相同的方式读取。例如,name=myname.yes通过直接spark提交,我可以将json添加为命令行参数。如下所示:spark submit--class someclass--master Thread somejar.jar'{“name”:“ayan”,“id”:“101”}'然后您必须将整个json作为字符串传递,因为args只接受字符串数组。但是在这里,我如何提及参数的名称?使用此命令时,我只能以args形式发送参数的值?对我来说,命令行参数是json数据。我如何发送该数据?json在数据中始终有空格,并且命令行参数是以空格分隔的。您是否能够在spark submit中将json作为命令行参数发送?或者,您可以在命令行中使用冒号或“=”分隔值,并在类中以相同的方式读取。例如,name=myname.yes通过直接spark提交,我可以将json添加为命令行参数。如下所示:spark submit--class someclass--master Thread somejar.jar'{“name”:“ayan”,“id”:“101”}'然后必须将整个json作为字符串传递,因为args只接受字符串数组。