繁体   English   中英

使用 Spark Scala 读取 JSON RDD

[英]Reading JSON RDD using Spark Scala

我从 Kafka 代理接收 JSON 数据,我正在使用 Spark Streaming 和 Scala 读取它。 以下是示例数据:

{"timestamp":"2020-12-11 22:35:00.000000 UTC","tech":"Spark","version":2,"start_time":1607725688402210,"end_time":1607726131636059}

我在 Scala 代码中以 RDD[String] 的形式接收此数据,现在我想从每个数据行中读取特定的键,例如上述数据中的“版本”。 我可以这样做:

for(record <- rdd){
  val jsonRecord = JSON.parseFull(record );
  val globalMap = jsonRecord.get.asInstanceOf[Map[String, Any]]
  val version = globalMap.get("version").get.asInstanceOf[String]
}

但我不确定这是否是读取具有 JSON 数据的 RDD 的最佳方法。 请建议。

谢谢,

使用json4s库解析 json 数据 & 它将可用 spark 默认不需要导入额外的库。

检查下面的代码。

scala> rdd.collect.foreach(println)

{"timestamp":"2020-12-11 22:35:00.000000 UTC","tech":"Spark","version":2,"start_time":1607725688402210,"end_time":1607726131636059}

scala> :paste
// Entering paste mode (ctrl-D to finish)

rdd.map{ row =>

    // Import required libraries for json parsers.
    import org.json4s._
    import org.json4s.jackson.JsonMethods._
    implicit val formats = DefaultFormats

    // parse json message using parse function from json4s lib.

    val jsonData = parse(row)

    // extract required fields from parsed json data.

    // extracting version field value
    val version = (jsonData \\ "version").extract[Int] 

    // extracting timestamp field value
    val timestamp = (jsonData \\ "timestamp").extract[String] 

    (version,timestamp)
}
.collect
.foreach(println)


// Exiting paste mode, now interpreting.

(2,2020-12-11 22:35:00.000000 UTC)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM