gpt4 book ai didi

scala - Spark Send DataFrame 作为 HTTP Post 请求的主体

转载 作者:行者123 更新时间:2023-12-05 01:43:11 25 4
gpt4 key购买 nike

我有一个数据框,我想将其作为 HTTP Post 的正文发送求什么最好Sparky怎么做?
如何控制多个 HTTP 请求?如果记录数越来越大,有什么办法可以将发送数据帧拆分为多个 HTTP Post 调用?

假设我的数据框是这样的:

+--------------------------------------+------------+------------+------------------+
| user_id | city | user_name | facebook_id |
+--------------------------------------+------------+------------+------------------+
| 55c3c59d-0163-46a2-b495-bc352a8de883 | Toronto | username_x | 0123482174440907 |
| e2ddv22d-4132-c211-4425-9933aa8de454 | Washington | username_y | 0432982476780234 |
+--------------------------------------+------------+------------+------------------+

我想要user_idfacebook_id在对此端点的 HTTP Post 请求正文中 localhost:8080/api/spark

最佳答案

您可以在 Dataframe 上使用 foreachPartition 方法来实现此目的。我在这里假设您想为 Dataframe 中的每一行并行进行 Http 调用。 foreachPartition 并行操作 Dataframe 的每个分区。如果您想在单个 HTTP post 调用中将多个行一起批处理,也可以通过将 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
*/
}

关于scala - Spark Send DataFrame 作为 HTTP Post 请求的主体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50139164/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com