1. 模仿cmd命令方式
使用“Runtime.getRuntime.exec(exeStr)”方法,传入要执行的cmd命令就可以了。
1 | def TestCmdExec(args: Array[String]) { |
- 优点:操作简单,对于简单的命令什么的可以直接使用
- 缺点:对于批量调用python程序比较复杂,也比较愚蠢,关于路径什么的都需要修改,不建议使用。
2. 编写restful接口,在scala内部发送http请求来调用
restful服务:URL定位资源,用HTTP动词(GET,POST,DELETE,DETC)描述操作。
1. 编写接口
因为要调用的程序是python程序,所以要使用python的flask来编写接口。
1 | from function import * |
2. scala端发送请求(httpclient4.5.5和httpclient3.0.1两种版本)
- 前言:httpclient4和httpclient3的差别还是蛮大的,所以使用需要注意版本的问题,而且就网上查阅的资料来看httpclient和httpcore的版本冲突还是蛮多的,还有和spark的版本兼容性问题也是。
1. httpclient4.5.5
- httpclient4.5.5是用在spark2.3上面的,maven添加依赖方法略
get请求示例
1 | def TestHttpGet(url: String): String = { |
post请求示例
1 | def restful(){ |
2.httpclient3.0.1
- httpclient3主要是支持spark1.6使用的,但是在spark2.3上面也同样兼容,但是httpclient4不支持spark1.6,因为手上的项目是spark1.6的,所以需要使用httpclient3。而且httpclient3的版本也比较古老,所以网上很少可以用的参考资料。这里是参考java版本写的scala版本的调用接口。
依赖
1 | <dependency> |
post客户请求方法(这里因为只需要用到post方法就只写了这个版本的)
1 | def TestHttpClient3(){ |
python服务器端
1 | //创建连接 |