2016-02-24 4 views
1

Честно говоря я не уверен, если эта функция существует? Жаль чтоЗагрузить Спарк RDD к ОТДОХНУТЬ методу POST вебсервис

Мое требование, чтобы отправить искрой проанализировали данные в файл-сервер на ежедневной основе, файловый сервер поддерживает передачу файлов через SFTP и REST Webservice.

Первоначальная мысль заключалась в том, чтобы сэкономить Spark RDD на HDFS и перенести на сервер файлов через SFTP. Я хотел бы знать, можно ли загрузить RDD напрямую, вызвав службу REST из класса искрового драйвера без сохранения в HDFS. Размер данных меньше 2 МБ

Извините за мой плохой английский!

ответ

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.

+0

Я хочу указать, что на самом деле вам не нужно собирать() результаты POST для веб-службы. Если используется RDD, а не набор результатов - каждый исполнитель сделает вызовы веб-службы для своих разделов. В некоторых случаях может потребоваться запрос параллельного веб-сервиса. –

0

Spark сам не предоставляет эту функциональность (это не клиент http общего назначения). Возможно, вы захотите использовать некоторую существующую клиентскую библиотеку для отдыха, такую ​​как akka-http, spray или какую-либо другую клиентскую библиотеку java/scala.

При этом вы никоим образом не обязаны сохранять свои данные на диск перед началом работы с ним. Например, вы можете использовать методы collect() или foreach на вашем RDD в сочетании с вашей клиентской библиотекой REST.

Смежные вопросы