坦率地说,我不确定这个功能是否存在?对不起
我的要求是每天将火花分析数据发送到文件服务器,文件服务器支持通过SFTP和REST Webservice邮件调用进行文件传输。
最初的想法是将Spark RDD保存到HDFS并通过SFTP传输到文件服务器。 我想知道是否可以通过从spark驱动程序类调用REST服务直接上载RDD而无需保存到HDFS。 数据大小小于2MB
抱歉我的英文不好!
答案 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-http或Dispatch。
答案 1 :(得分:0)
Spark本身不提供此功能(它不是通用的http客户端)。 您可以考虑使用一些现有的rest客户端库,例如akka-http,spray或其他一些java / scala客户端库。
也就是说,在操作数据之前,您无需将数据保存到磁盘。例如,您可以将RDD上的collect()
或foreach
方法与REST客户端库结合使用。