Вы можете достичь этого, используя метод foreachPartition
на Dataframe. Здесь я предполагаю, что вы хотите сделать вызов Http для каждой строки в кадре данных параллельно. foreachPartition
работает на каждом разделе Dataframe параллельно. Если вы хотите объединить несколько строк в один пост-вызов HTTP, это также возможно, изменив сигнатуру метода makeHttpCall
с Row
на Iterator[Row]
def test(): Unit = {
val df: DataFrame = null
df.foreachPartition(_.foreach(x => makeHttpCall(x)))
}
def makeHttpCall(row: Row) = {
val json = Json.obj("user_name" -> row.getString(2), "facebook_id" -> row.getString(3))
/**
* code make Http call
*/
}
для массового запроса Http makeHttpCall
. убедитесь, что у вас есть достаточное количество разделов в фрейме данных, чтобы каждый раздел был достаточно маленьким для выполнения запроса Http Post.
import org.apache.spark.sql.{DataFrame, Row}
import play.api.libs.json.Json
def test(): Unit = {
val df: DataFrame = null
df.foreachPartition(x => makeHttpCall(x))
}
def makeHttpCall(row: Iterator[Row]) = {
val json = Json.arr(row.toSeq.map(x => Json.obj("user_name" -> x.getString(2), "facebook_id" -> x.getString(3))))
/**
* code make Http call
*/
}