我正在尝试从IBM Cloud的DB2 Warehouse文档中读取JSON响应。这要求我传递一个请求正文,其中我必须提供userid
和password
作为请求参数。
要阅读使用spark.read.json
,我没有发现可以提供请求参数的任何内容。无论如何,有什么可以使用的呢?
通常我会单独使用Scalascalaj-http
和play-json
像这样的库来读取JSON :
val body = Json.obj(Constants.KEY_USERID -> userid, Constants.KEY_PASSWORD -> password)
val response = Json.parse(Http(url + Constants.KEY_ENDPOINT_AUTH_TOKENS)
.header(Constants.KEY_CONTENT_TYPE , "application/json")
.header(Constants.KEY_ACCEPT , "application/json")
.postData(body.toString())
.asString.body)
我的要求是我不能使用这两个库,而必须scala
与spark
框架一起使用。
您不能spark.read.json
直接用于REST API数据提取。
首先,发出API调用请求以获取响应数据,然后使用Spark将其转换为DataFrame。请注意,如果您的API是分页的,则需要进行多次调用才能获取所有数据。
对于您的示例,您需要调用身份验证终结点才能获取Bearer token
,然后将其添加到请求标头中:
Authorization: Bearer <your_token>
所有这部分都可以仅使用Scala(例如scala.io.Source.fromURL
)完成。
一旦获得response_data
,请使用spark将其转换为DF:
import spark.implicits._
val df = spark.read.json(Seq(response_data).toDS)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句