问题描述
我是Azure Databricks和Scala的新手,我正在尝试使用返回JSON的HTTP REST API,我遍历了databricks文档,但没有看到任何可与rest api一起使用的数据源。有关如何使用数据块中的rest api的库或教程。如果我进行多个api调用(由于分页的原因),最好以并行方式(火花方式)完成它。
如果有一种Databricks或Spark方法可以使用REST API,我会很高兴,因为我很震惊地发现文档中没有关于api数据源的信息。
解决方法
在我看来,您想要的是将要发出HTTP请求的库导入scala。我建议使用HTTP而不是更高级别的REST接口,因为分页可能在REST库中处理,并且可能支持也可能不支持并行性。 使用较低级别的HTTP进行管理可让您取消分页。然后,您可以使用您选择的并行机制。
那里有很多库,但是推荐一个特定的库不在范围之内。
如果您不想导入库,则可以让scala笔记本调用另一个运行标准库中包含HTTP的语言的笔记本。然后,该笔记本会将数据返回到scala笔记本。
,这是一个Simple
实现。
基本思想是spark.read.json
可以阅读RDD
。
因此,只需通过RDD
调用创建一个GET
,然后将其读取为常规数据框。
%spark
def get(url: String) = scala.io.Source.fromURL(url).mkString
val myUrl = "https://<abc>/api/v1/<xyz>"
val result = get(myUrl)
val jsonResponseStrip = result.toString().stripLineEnd
val jsonRdd = sc.parallelize(jsonResponseStrip :: Nil)
val jsonDf = spark.read.json(jsonRdd)
就是这样。