RESTインターフェースを提供するWebサービスからいくつかのJSONデータを読み取る必要があります。SPARK分析用のSQLコードからデータを照会します。私は読み取ることができますblobストアに格納されたJSONを使用します。
RESTサービスからデータを読み取り、他のDataFrame
のように使用するための最良の方法は何ですか?.
ところで、それが役立つ場合は、SPARK 1.6 of Linux cluster on HD insight
を使用しています。また、SPARK環境にまだ慣れていないので、誰かが同じコードスニペットを共有できるようにしてください。
Spark 1.6:
Pythonを使用している場合は、 requests ライブラリを使用して情報を取得し、そこからRDDを作成します。 Scala(関連する thread )には、同様のライブラリが必要です。次に、次のようにします。
json_str = '{"executorCores": 2, "kind": "pyspark", "driverMemory": 1000}'
rdd = sc.parallelize([json_str])
json_df = sqlContext.jsonRDD(rdd)
json_df
Scalaのコード:
val anotherPeopleRDD = sc.parallelize(
"""{"name":"Yin","address":{"city":"Columbus","state":"Ohio"}}""" :: Nil)
val anotherPeople = sqlContext.read.json(anotherPeopleRDD)
これは以下からです: http://spark.Apache.org/docs/latest/sql-programming-guide.html#json-datasets
Jsonは階層構造であり、データフレームはフラットであるため、Sparkは任意のjsonをデータフレームに解析できません。 jsonがsparkによって作成されていない場合、それは condition に準拠していない可能性があります。「各行には個別の自己完結型の有効なJSONオブジェクトが含まれている必要がある」ため、カスタムを使用して解析する必要がありますコードし、ケースクラスオブジェクトのコレクションまたはspark sql Rowsとしてデータフレームにフィードします。
次のようにダウンロードできます。
import scalaj.http._
val response = Http("proto:///path/to/json")
.header("key", "val").method("get")
.execute().asString.body
次に、jsonを この回答に示されている として解析します。そして、あなたのケースクラスのオブジェクトのSeqを作成し(例えばseq)、次のようにデータフレームを作成します
seq.toDF
ここに行きます:-spark 2.2
import org.Apache.spark.sql._
import org.Apache.hadoop.conf.Configuration
import org.Apache.hadoop.fs._
import org.Apache.http.client.methods.HttpGet
import org.Apache.http.impl.client.DefaultHttpClient
import org.Apache.spark.sql.{DataFrame, SaveMode, SparkSession}
import org.Apache.spark.sql.functions._
import org.Apache.spark.sql.types.StructType
import org.Apache.log4j.{Level, Logger}
import org.Apache.spark.rdd.RDD
import org.Apache.spark.sql.types._
import org.Apache.spark.storage.StorageLevel
object SparkRestApi {
def main(args: Array[String]): Unit = {
val logger = Logger.getLogger("blah")
Logger.getLogger("org").setLevel(Level.WARN)
Logger.getLogger("akka").setLevel(Level.WARN)
val spark = SparkSession.builder()
.appName("blah")
.config("spark.sql.warehouse.dir", "C:\\Temp\\Hive")
.master("local[2]")
//.enableHiveSupport()
.getOrCreate()
import spark.implicits._
val url = "https://api.github.com/users/hadley/orgs"
val result2 = List(scala.io.Source.fromURL(url).mkString)
val githubRdd2=spark.sparkContext.makeRDD(result2)
val gitHubDF2=spark.read.json(githubRdd2)
println(gitHubDF2)
gitHubDF2.show()
spark.stop()
}
}