如果JSON文件中每一行就是一个JSON记录,那么可以通过将JSON文件当做文本文件来读取,然后利用相关的JSON库对每一条数据进行JSON解析。
数据准备
[yinggu@hadoop102 spark]$ touch people.json
[yinggu@hadoop102 spark]$ vim people.json
{"name":"Michael","age":18}
{"name":"Andy", "age":30}
{"name":"Justin", "age":19}
Spark RDD JSON 输入输出
scala> case class Person(name:String,age:Int){}
defined class Person
scala> import org.json4s._
import org.json4s._
scala> import org.json4s.jackson.JsonMethods._
import org.json4s.jackson.JsonMethods._
scala> import org.json4s.jackson.Serialization
import org.json4s.jackson.Serialization
scala> var result = sc.textFile("./people.json")
result: org.apache.spark.rdd.RDD[String]
= ./people.json MapPartitionsRDD[1] at textFile at <console>:31
scala> implicit val formats = Serialization.formats(ShortTypeHints(List()))
formats: org.json4s.Formats{
val dateFormat: org.json4s.DateFormat; val typeHints: org.json4s.TypeHints}
= org.json4s.Serialization$$anon$1@5ce045e3
scala> result.collect().foreach( \
x => {var c = parse(x).extract[Person];println(c.name + "," + c.age)})
Michael,18
Andy,30
Justin,19
如果JSON数据是跨行的,那么只能读入整个文件,然后对每个文件进行解析。
JSON数据的输出主要是通过在输出之前将结构化数据组成的 RDD 转为字符串 RDD,然后使用 Spark 的文本文件 API 写出去。 说白了还是以文本文件的形式存,只是文本的格式已经在程序中转换为JSON。
版权声明:本文为qq_28652401原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。