Spark八 读取和保存数据之文件格式与文件系统
Spark支持Hadoop MapReduce使用的InputFormat和OutputFormat接口访问数据,HDFS/HBase/S3/Cassandra等大部分文件格式和存储系统都支持这种接口
三种数据源
文件格式和文件系统
> 本地文件系统和分布式文件系统:NFS/HDFS/S3
> 文件格式:文本文件/JSON/SequenceFile/protocol buffer
Spark SQL的结构化数据源
> 使用API使用JSON和Hive在内的结构化数据源
数据库和键值存储
> 使用自带的库或者第三方库连接Cassandra/HBase/Elasticsearch以及JDBC
文件格式
Spark根据文件扩展名选择对应的处理方式
1 文本文件
> 读取文本文件
> textFile()
> wholeTextFile()
> 保存文本文件
> saveAsTextFile()
2 JSON
> 读取JSON
> 当作文本文件读取,然后对数据进行解析
> Scala或者Java使用Jackson
> 保存JSON
> 将结构化数据组成的RDD转为字符串RDD,再使用文本文件的API写到文件中
3 CSV/TSV 逗号分隔值/制表符分隔值
> 读取CSV
> opencsv库
> 保存CSV
> 创建映射关系,使用数组确定各个字段
4 SequenceFile
有同步标记,可以用来定位文件的某个点,边界对齐
> 读取SequenceFile
> 接口sequenceFile(path, keyClass, valueClass, minPartitions)
> 保存SequenceFile
> 接口saveSequenceFile(path)
5 对象文件
使用Java序列化写,因为可以保存几乎所有对象,在Python中无法使用
> 读取对象文件 SparkContext.objectFile(path)
> 保存对象文件 saveAsObjectFile()
6 HadoopInputFormat/OutputFormat
7 文件压缩
> 与Hadoop的压缩方式相同
文件系统
1 本地/常规文件系统
Spark读取本地文件系统的文件必须在集群中所有节点的相同路径下
2 Amazon S3
计算节点部署在Amazon EC2,存储使用Amazon S3,效率高,但是公网访问数据性能会差
3 HDFS
hdfs://master:port/path