Spark数据读取格式解析

本文详细介绍了Spark中各种数据读取格式,包括文本文件、JSON、CSV、SequenceFile、对象文件、Hadoop输入输出格式及文件压缩的处理方法。通过示例展示了如何读取和保存不同格式的数据,如文本、JSON、CSV,并讨论了与Hadoop的兼容性。
摘要由CSDN通过智能技术生成

1.文本文件

在 Spark 中读写文本文件很容易。

当我们将一个文本文件读取为 RDD 时,输入的每一行 都会成为 RDD 的 一个元素

也可以将多个完整的文本文件一次性读取为一个 pair RDD, 其中键是文件名,值是文件内容

 在 Scala 中读取一个文本文件

1
2
val inputFile = "file:///home/common/coding/coding/Scala/word-count/test.segmented"
val textFile = sc.textFile(inputFile)

 在 Scala 中读取给定目录中的所有文件

1
val input = sc.wholeTextFiles( "file:///home/common/coding/coding/Scala/word-count" )

 保存文本文件,Spark 将传入的路径作为目录对待,会在那个目录下输出多个文件

1
2
textFile.saveAsTextFile( "file:///home/common/coding/coding/Scala/word-count/writeback" )
//textFile.coalesce(1).saveAsTextFile 就能保存成一个文件

对于dataFrame文件,先使用.toJavaRDD 转换成RDD,然后再使用  coalesce(1).saveAsTextFile

2.JSON

JSON 是一种使用较广的半结构化数据格式。

读取JSON,书中代码有问题所以找了另外的一段读取JSON的代码

 build.sbt

1
"org.json4s" %% "json4s-jackson" % "3.2.11"

 代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext. _
import org.apache.spark.SparkConf
import org.json 4 s. _
import org.json 4 s.jackson.JsonMethods. _
import org.json 4 s.jackson.Serialization
import org.json 4 s.jackson.Serialization.{read, write}
 
/**
   * Created by common on 17-4-3.
   */
 
case class Person(firstName : String, lastName : String, address : List[Address]) {
   override def toString = s "Person(firstName=$firstName, lastName=$lastName, address=$address)"
}
 
case class Address(line 1 : String, city : String, state : String, zip : String) {
   override def toString = s "Address(line1=$line1, city=$city, state=$state, zip=$zip)"
}
 
object WordCount {
   def main(args : Array[String]) {
     val inputJsonFile = "file:///home/common/coding/coding/Scala/word-count/test.json"
     val conf = new SparkConf().setAppName( "WordCount" ).setMaster( "local" )
     val sc = new SparkContext(conf)
     val input 5 = sc.textFile(inputJsonFile)
     val dataObjsRDD = input 5 .map { myrecord = >
       implicit val formats = DefaultFormats
       // Workaround as      DefaultFormats is not serializable
       val jsonObj = parse(myrecord)
       //val addresses = jsonObj \ "address"
       //println((addresses(0) \ "city").extract[String])
       jsonObj.extract[Person]
     }
     dataObjsRDD.saveAsTextFile( "file:///home/common/coding/coding/Scala/word-count/test1.json" )
 
   }
 
 
}

 读取的JSON文件

1
2
{ "firstName" : "John" , "lastName" : "Smith" , "address" : [{ "line1" : "1 main street" , "city" : "San Francisco" , "state" : "CA" , "zip" :
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值