We use Apache Livy to read data from object storage in a Spark cluster.
Apache Livy API: POST http://server:port/sessions/{sessionId}/statements Request Payload:
{"code":" val df = spark.read.option(\"header\", true).json(\"xxx://somebucket@somenamespace/xyz\"); \n df.toJSON.collect.mkString(\"[\", \",\", \"]\")"}
I see the above working with postman without issues. We need to call this API from Java. When we tried to call the above API from Java App using a Jersey Client(version 2.30.1 on Java 11), Apache Livy server returns 'Internal Server Error' (500). The Jersey client code looks like as shown below:
JSONObject payLoad = new JSONObject();
String codeBlock = "val df = spark.read.option(\"header\", true).json(\"xxx://somebucket@somenamespace/xyz\"); \n df.toJSON.collect.mkString(\"[\", \",\", \"]\")";
payLoad.put("code", codeBlock);
// In this e.g, session id: '0' is created before calling the below API
String apacheLivyUrl = "http://localhost:8998/sessions/0/statements";
Response response = ClientBuilder.newBuilder().build().target(apacheLivyUrl)
.request(MediaType.APPLICATION_JSON)
.accept(MediaType.APPLICATION_JSON)
.post(Entity.json(payLoad.toString()));
Any idea what is going wrong here? Thanks for your time