有没有办法让sparkjava有一个类似于dropwizard的宁静java API?

时间:2017-10-17 20:56:58

标签: java rest spark-java

我的团队正在考虑将sparkjava用于RESTful Web服务,但我对反序列化请求的选项不满意。

似乎选项是:

  1. 使用默认的反序列化,它只提供嵌套的地图结构,这违背了使用像Java这样的OO语言的目的

  2. 在一堆样板文件中包装每个路径定义,以反序列化/序列化请求和响应对象,并调用处理程序方法。

  3. 我已经写了一些东西来减少样板量,所以你可以这样写:

        public void Routes() {
            post("/happy/birthday", (request, response) -> {
                return callJson(getHandler("birthday"), request, response);
            });
        }
    

    哪个不好,但需要反思来查找生日方法,因此没有生日处理程序方法存在的编译时验证。但感觉应该有更好的方法。

3 个答案:

答案 0 :(得分:0)

可能会误解某些内容,但Spark Java只是Java,因此您可以使用任何Java序列化库。我已经将Gson与Spark一起使用了。

  Gson gson = new Gson();

  post("/employee", (request, response) -> {
     ValidateNewEmployeeCommand command = new ValidateNewEmployeeCommand();
     Employee emp = gson.fromJson(request.body(), Employee.class);
     return command.validateEmployee(emp);
  }, gson::toJson);

答案 1 :(得分:0)

Livy(Apache许可证)是一项服务,它使远程应用程序能够通过REST API轻松地与Spark群集进行交互。它可以通过简单的REST接口或RPC客户端库轻松提交Spark作业或Spark代码片段,同步或异步结果检索以及SparkContext管理。 Livy还简化了Spark与应用服务器之间的交互,简化了交互式Web /移动应用程序所需的架构。

使用Livy,您还可以:

多个客户端使用长时间运行的SparkContexts进行多个Spark作业

同时管理多个SparkContexts,并在集群(YARN / Mesos)而不是Livy Server上运行它们,以获得良好的容错性和并发性

将作业提交为预编译的jar,代码片段或通过Java / Scala客户端API

通过安全的身份验证通信(正在进行的工作)确保安全性

要使用Livy,必须在服务器上安装Spark(1.4或更高版本; Scala 2.10版本)。要开始使用download/install packages from here,然后执行以下操作:

https://blog.cloudera.com/blog/2016/07/livy-the-open-source-rest-service-for-apache-spark-joins-cloudera-labs/

答案 2 :(得分:0)

看起来没有办法实现我的目标,但我们已经制定了一些能够为我们完成工作的实用工具,并允许我们按照它们在Dropwizard中定义的方式定义路径。我们将看看我们是否可以开源。