使用Scala Spark从URL获取结果
因此,我对Scala非常陌生,我正试图弄清楚如何调用Web服务并在Json对象中返回响应。我遇到了各种各样的问题。可能是因为我犯了一个错误。但是我被卡住了,也许有人能帮我 通过一些搜索,我发现我可以定义一个函数来调用API(实际上我只是找到了调用方法代码并为它定义了一个函数) 所以我调用这个函数,将响应转换成文本使用Scala Spark从URL获取结果,scala,rest,apache-spark,Scala,Rest,Apache Spark,因此,我对Scala非常陌生,我正试图弄清楚如何调用Web服务并在Json对象中返回响应。我遇到了各种各样的问题。可能是因为我犯了一个错误。但是我被卡住了,也许有人能帮我 通过一些搜索,我发现我可以定义一个函数来调用API(实际上我只是找到了调用方法代码并为它定义了一个函数) 所以我调用这个函数,将响应转换成文本 val response: String = GetUrlContent(url).toString() 我知道有点多余,但我什么都试过了。但在这里我遇到了问题。 我试图将整个数据转
val response: String = GetUrlContent(url).toString()
我知道有点多余,但我什么都试过了。但在这里我遇到了问题。
我试图将整个数据转换成一个字符串RDD,这样我就可以查找特定的行(因为我是新手,还不能将数据映射到Json)。我用了这句话:
response.reduce((x,y) => x + y)
然而,这就产生了错误:
错误:(22,30)类型不匹配;
找到:Int
必需:字符
响应减少((x,y)=>x+y)
我试着将x和y转换为Char,但这不起作用。就像我说的,我可能跳过了一些东西。有人能解释一下为什么我得到的是一个字符数组,而不是一个行的字符串数组(就像读取文件一样)?
而且,我们欢迎提供示例或解决方案
提前谢谢!
托马斯好吧,我觉得我在这方面花的时间太长了,不过我对Spark&Scala了解了很多,所以这是值得的。每个人都在寻找一种简单的方法来发布一个调用并获得一个Json数据帧作为响应,我最终实现了这个函数,它适合我。希望这能进一步帮助你们
import org.apache.spark.sql.{DataFrame, SQLContext, SparkSession}
def GetUrlContentJson(url: String): DataFrame ={
val result = scala.io.Source.fromURL(url).mkString
//only one line inputs are accepted. (I tested it with a complex Json and it worked)
val jsonResponseOneLine = result.toString().stripLineEnd
//You need an RDD to read it with spark.read.json! This took me some time. However it seems obvious now
val jsonRdd = spark.sparkContext.parallelize(jsonResponseOneLine :: Nil)
val jsonDf = spark.read.json(jsonRdd)
return jsonDf
}
val response = GetUrlContentJson(url)
response.show
您是否找到了一种不首先将其保存到rdd而直接获取它的方法?
import org.apache.spark.sql.{DataFrame, SQLContext, SparkSession}
def GetUrlContentJson(url: String): DataFrame ={
val result = scala.io.Source.fromURL(url).mkString
//only one line inputs are accepted. (I tested it with a complex Json and it worked)
val jsonResponseOneLine = result.toString().stripLineEnd
//You need an RDD to read it with spark.read.json! This took me some time. However it seems obvious now
val jsonRdd = spark.sparkContext.parallelize(jsonResponseOneLine :: Nil)
val jsonDf = spark.read.json(jsonRdd)
return jsonDf
}
val response = GetUrlContentJson(url)
response.show