在Java

时间:2019-03-04 17:11:45

标签: java apache-spark 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网址。

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"));
}

1 个答案:

答案 0 :(得分:0)

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

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

args : [ "myname", "101" ]