Получить результаты из URL с помощью Scala Spark - PullRequest
0 голосов
/ 26 сентября 2018

так что я действительно новичок в Scala и пытаюсь выяснить, как вызвать веб-сервис и получить ответ обратно в объект Json.Я сталкиваюсь с различными проблемами.Скорее всего, потому что я делаю ошибку.Но я застрял, поэтому, возможно, кто-то может мне помочь.

В ходе некоторых поисков я обнаружил, что могу определить функцию для вызова API (на самом деле я просто нашел код метода вызова и определил для него функцию)

def GetUrlContent(url: String): String ={
val result = scala.io.Source.fromURL(url).mkString
return result.toString()
}

Поэтому я вызываю этофункция и получить ответ в текст.

val response: String = GetUrlContent(url).toString()

Я немного знаю, но все перепробовал.Но тут я сталкиваюсь с проблемами.Я попытался собрать все данные в строку RDD, чтобы я мог искать конкретные строки (поскольку я действительно новичок и пока не могу сопоставить данные с Json).Я использовал это утверждение:

 response.reduce((x,y) => x + y)

Однако это дало ошибку: Ошибка: (22, 30) несоответствие типов;найдено: Int обязательно: Char response.reduce ((x, y) => x + y)

Я попытался привести x и y к Char, но это не работает.Поэтому, как я уже сказал, я, вероятно, что-то пропустил.Может кто-нибудь объяснить мне, почему я получаю массив Char, а не массив строк (как вы это делаете при чтении файла)?И примеры или решения всегда приветствуются.

Заранее спасибо!Томас

1 Ответ

0 голосов
/ 02 октября 2018

Хорошо, я чувствую, что слишком долго трачу на это, однако я многое узнал о Spark & ​​Scala, так что это того стоит.Для всех, кто ищет простой способ опубликовать вызов и получить Json DataFrame в ответ, я в конце концов сделал эту функцию, которая работает для меня.Надеюсь, это поможет вам, ребята.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...