Scala - 如何调用REST API并将其保存为HDFS中的json文件?

时间:2016-12-12 20:19:12

标签: json scala rest apache-spark hdfs

环境:Scala和spark 1.6

我正在努力 -
1.通过Rest API调用获取json数据
2.在HDFS中写为json文件 3.将json文件转换为dataframe

val rawdata = "curl http://services.groupkt.com/state/get/USA/all"!!
println(rawdata)  // can see json output, but can't save as file in HDFS

我可以在屏幕上看到输出,但是如何将rawdata的内容写入hdfs url(hdfs://quickstart.cloudera:8020 / user / hive / warehouse / test /)?或者有没有办法在不保存为文件的情况下包装rawdata的内容?我还需要将json转换为数据帧。

提前致谢
侯赛因

1 个答案:

答案 0 :(得分:2)

val rawdata = "curl http://services.groupkt.com/state/get/USA/all"!!
println(rawdata) 

获得data后,您可以使用此answer中的代码将其保存在Hadoop中。

  

创建数据框:

假设你的json字符串是这样的:

{"time":"sometext1","host":"somehost1","event":  {"category":"sometext2","computerName":"somecomputer1"}}

您可以从以下代码转换json into dataframe

// Creating Rdd    
val vals = sc.parallelize(
  """{"time":"sometext1","host":"somehost1","event":  {"category":"sometext2","computerName":"somecomputer1"}}""" ::
    Nil)

// Creating Schema   
val schema = (new StructType)
  .add("time", StringType)
  .add("host", StringType)
  .add("event", (new StructType)
    .add("category", StringType)
    .add("computerName", StringType))

import sqlContext.implicits._
val jsonDF = sqlContext.read.schema(schema).json(vals)

创建dataframe后,您仍然可以选择使用spark-csv lib或{strong> RDD hadoop方法将其保存在saveAsTextFile中>