黑猴子的家:Spark RDD JSON文件输入输出(数据读取与保存的主要方式之一)

  • Post author:
  • Post category:其他


如果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 版权协议,转载请附上原文出处链接和本声明。