将Spark RDD上传到REST webservice POST方法

时间:2016-02-24 23:08:59

标签: web-services scala rest hadoop apache-spark

坦率地说,我不确定这个功能是否存在?对不起

我的要求是每天将火花分析数据发送到文件服务器,文件服务器支持通过SFTP和REST Webservice邮件调用进行文件传输。

最初的想法是将Spark RDD保存到HDFS并通过SFTP传输到文件服务器。 我想知道是否可以通过从spark驱动程序类调用REST服务直接上载RDD而无需保存到HDFS。 数据大小小于2MB

抱歉我的英文不好!

2 个答案:

答案 0 :(得分:2)

使用Spark没有具体的方法。使用这种数据大小,通过HDFS或其他类型的存储是不值得的。您可以在驱动程序的内存中收集这些数据并直接发送。对于POST呼叫,您可以使用普通的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的更完整的讨论可以在this question找到。您还可以使用Scala库来处理丑陋的Java内容,例如akka-httpDispatch

答案 1 :(得分:0)

Spark本身不提供此功能(它不是通用的http客户端)。 您可以考虑使用一些现有的rest客户端库,例如akka-http,spray或其他一些java / scala客户端库。

也就是说,在操作数据之前,您无需将数据保存到磁盘。例如,您可以将RDD上的collect()foreach方法与REST客户端库结合使用。