Отправка аргумента JSON в качестве параметра livy в Java - PullRequest
0 голосов
/ 04 марта 2019

Я пытаюсь подать искровую работу через Ливи.В работе мне нужно опубликовать данные json в параметре args при вызове livy. Это то, что я сделал

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 для вызова 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"));
}

1 Ответ

0 голосов
/ 05 марта 2019

В Livy rest API args - это аргументы командной строки для приложения.Это в основном массив строк, но в вашем сценарии вы передаете массив json.Ниже приведен пример вашей команды spark-submit и параметра args в вызове API rest.

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

args : [ "myname", "101" ]
...