将spark rdd上载到rest web服务post方法

rqmkfv5c  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(369)

坦白说,我不确定这个功能是否存在?抱歉
我的要求是每天向文件服务器发送spark分析数据,文件服务器支持通过sftp和restwebservice post调用进行文件传输。
最初的想法是将spark rdd保存到hdfs中,并通过sftp传输到文件服务器。我想知道有没有可能通过调用spark驱动程序类中的rest服务直接上传rdd而不保存到hdfs。数据大小小于2mb
对不起,我英语不好!

q5lcpyga

q5lcpyga1#

spark本身不提供此功能(它不是通用的http客户机)。您可以考虑使用一些现有的rest客户机库,如akkahttp、spray或其他java/scala客户机库。
也就是说,在对数据进行操作之前,您没有义务将数据保存到磁盘上。例如,你可以使用 collect() 或者 foreach 方法与rest客户机库结合使用。

bkkx9g8r

bkkx9g8r2#

使用spark没有具体的方法。有了这种数据大小,通过hdfs或其他类型的存储是不值得的。你可以在你的司机的记忆中收集数据并直接发送。你可以用普通的旧电话 java.net.URL ,看起来像这样:

import java.net.{URL, HttpURLConnection}

// The RDD you want to send
val rdd = ???

// Gather data and turn into string with newlines
val body = rdd.collect.mkString("\n")

// Open a connection
val url = new URL("http://www.example.com/resource")
val conn = url.openConnection.asInstanceOf[HttpURLConnection]

// Configure for POST request
conn.setDoOutput(true);
conn.setRequestMethod("POST");

val os = conn.getOutputStream;
os.write(input.getBytes);
os.flush;

关于使用 java.net.URL 可以在这个问题上找到答案。您还可以使用scala库来处理难看的java内容,比如akkahttp或dispatch。

相关问题