使用 Spark(Databricks) 的并行 REST API 请求

Fel*_*ezR 6 rest apache-spark pyspark databricks azure-databricks

我想利用 Spark(它在 Databricks 上运行,我正在使用 PySpark)向 REST API 发送并行请求。现在我可能面临两种情况:

  • REST API 1:返回 ~MB 量级的数据
  • REST API 2:返回~KB量级的数据。

关于如何在节点之间分配请求有什么建议吗?

谢谢!

Ale*_*Ott 10

只需创建一个包含 URL(如果您使用不同的)和 API 参数(如果它们不是 URL 的一部分)的数据框 - 这可以通过从列表等显式创建它或通过从外部数据读取数据来完成源,例如 JSON 文件或类似的东西(spark.read函数)。

然后定义用户定义的函数,该函数将执行对 REST API 的请求并将数据作为列返回。像这样的东西(未测试):

import urllib
df = spark.createDataFrame(
  [("url1", "params1"), ("url2", "params2")],
  ("url", "params"))

@udf("body string, status int")
def do_request(url: str, params: str):
  with urllib.request.urlopen(url) as f:
    status = f.status
    body = f.read().decode("utf-8")
  
  return {'status': status, 'body': body}
  

res = df.withColumn("result", do_requests(col("url"), col("params")))
Run Code Online (Sandbox Code Playgroud)

这将返回带有名为的新列的数据帧,result该列将有两个字段 -statusbody(JSON 答案)。您需要添加错误处理等。