我正在尝试从IBM的DB2仓库文档读取一个JSON响应。这要求我传递一个请求体,其中我必须提供userid和password作为请求参数。
要使用spark.read.json阅读,我没有发现任何可以提供请求参数的内容。我们还能用它吗?
通常,我只使用scalaj-http和play-json库使用Scala读取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框架。
发布于 2019-12-04 16:17:29
不能直接使用spark.read.json来摄取REST数据。
首先,发出API调用请求以获取响应数据,然后将其转换为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)https://stackoverflow.com/questions/59134039
复制相似问题