Spark文本文件输入输出
1.文本文件输入输出
textFile 进行文本文件的读取
ps:如果传递目录,则将目录下的所有文件读取作为RDD
saveAsTextFile 进行文本文件的输出
ps:将传入的路径作为目录对待,会在那个 目录下输出多个文件
2.JSON文件输入输出
JSON文件中每一行就是一个JSON记录,那么可以通过将JSON文件当做文本文件来读取,然后利用相关的JSON库对每一条数据进行JSON解析。
ps:需要在程序中进行手动编码和解码
3.CSV文件输入输出
读取 CSV 数据和读取 JSON 数据相似,都需要先把文件当作普通文本文件来读取数据,然后通过将每一行进行解析实现对CSV的读取。
4.SequenceFile文件输入输出
SequenceFile文件是Hadoop用来存储二进制形式的key-value对而设计
saveAsSequenceFile 存储文件数据
可以直接调用 saveAsSequenceFile(path) 保存你的PairRDD,它会帮你写出数据。需要键和值能够自动转为Writable类型
sequenceFile读取文件是需要指定文件中的数据类型(泛型类型)
object Test {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setAppName("Test").setMaster("local[*]")
val sc = new SparkContext(conf)
//1.文本文件输入输出
val rdd = sc.textFile("dir/file")
rdd.saveAsTextFile("out3")
//2.Json数据和CSV的数据在将SparkSQL的时候讲
//3.SequenceFile文件的输入输出
val data=sc.parallelize(List((2,"aa"),(3,"bb"),(4,"cc"),(5,"dd"),(6,"ee")))
data.saveAsSequenceFile("out4")
val sdata = sc.sequenceFile[Int,String]("out4")
println(sdata.collect().toBuffer)
}
}
总结:
Spark的整个生态系统与Hadoop是完全兼容的,所以对于Hadoop所支持的文件类型或者数据库类型,Spark也同样支持.另外,由于Hadoop的API有新旧两个版本,所以Spark为了能够兼容Hadoop所有的版本,也提供了两套创建操作接口.对于外部存储创建操作而言,HadoopRDD和newHadoopRDD是最为抽象的两个函数接口,主要包含以下四个参数.
-
输入格式(InputFormat): 制定数据输入的类型,如TextInputFormat等,新旧两个版本所引用的版本分别是org.apache.hadoop.mapred.InputFormat和org.apache.hadoop.mapreduce.InputFormat(NewInputFormat)
-
键类型: 指定[K,V]键值对中K的类型
-
值类型: 指定[K,V]键值对中V的类型
-
分区值: 指定由外部存储生成的RDD的partition数量的最小值,如果没有指定,系统会使用默认值defaultMinSplits