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"
:
|