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根据文件扩展名选择对应的处理方式

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