数据读取和保存
Spark本身是基于Hadoop生态圈而构建,特别是Spark可用通过Hadoop MapReduce所使用的InputFormat和OutputFormat接口访问数据。
分布式文件系统(比如NFS,HDFS,Amazon S3)
三种常见的数据源
1.文件格式与文件系统
2.Spark SQL中的结构化数据
Spark SQL模块针对包括JSON和Apache Hive在内的结构化数据源,提供一套API
3.数据库与键值存储
\(\color{red}{文件格式}\)
\(\color{blue}{文本文件}\)
Spark支持将多个完整的文本文件一次性读取为一个pair RDD,其中键是文件名,值是文件内容,wholeTextFiles()
\(\color{blue}{JSON}\)
读取JSON数据的最简单的方式是将数据作为文本文件读取,然后使用JSON解析器来对RDD中的值进行映射操作
\(\color{blue}{SequenceFile}\)
SequenceFile是由没有相对关系结构的键值对文件组成的常用Hadoop格式
\(\color{blue}{对象文件}\)
对象文件看起来就像是对SequenceFile的简单封装,它允许存储只包含值的RDD。和SequenceFile不一样的是,对象文件是使用Java序列化写出的。
保存对象文件,saveAsObjectFile
读回对象文件,objectFile
对象文件的优势是可以用来保存几乎任意对象而不需要额外的工作。
\(\color{blue}{Hadoop输入输出}\)
\(\color{blue}{文件压缩}\)
可以很容易地从多个节点上并行读取的格式被称为“可分割”的格式。可用的压缩选项
\(\color{red}{文件系统}\)
\(\color{blue}{本地文件系统}\)
Spark支持从本地文件系统中读取文件,不过它要求文件在集群中所有节点的相同路径下都可找到。
\(\color{maroon}{如果文件还没有放在集群中的所有节点上,你可以在驱动器程序中从本地读取该文件而无需使用整个集群,然后再调用parallelize将内容分发给工作节点}\)。不过这种方式可能会比较慢,所以推荐的方法是将文件先放到像 HDFS、 NFS、 S3 等共享文件系统上。
\(\color{blue}{Amazon S3}\)
\(\color{blue}{HDFS}\)
Hadoop分布式文件系统(HDFS)是一种广泛使用的文件系统。HDFS提供高吞吐量以及弹性地应对节点失败。
在Spark中使用HDFS只需将输入输出路径制定为hdfs://master:port/path
\(\color{red}{Spark SQL中的结构化数据}\)
Spark SQL是一种操作结构化和半结构化数据的方式
我们把一条SQL查询给Spark SQL,让它对一个数据源执行查询,然后得到由Row对象组成的RDD,每个Row对象表示一条记录。
\(\color{blue}{Apache Hive}\)
Apache Hive是Hadoop 上一种常见的结构化数据源。
Hive可以在HDFS内存储多种格式的表。Spark SQL可以读取Hive支持的任何表。
from pyspark.sql import HiveContext
hiveCtx = HiveContext(sc)
rows = hiveCtx.sql("SELECT name,age FROM users")
firstRow = rows.first()
\(\color{red}{数据库}\)
\(\color{blue}{Cassandra}\)
\(\color{blue}{HBase}\)
Spark可以通过Hadoop输入格式访问HBase.这个输入格式会返回键值对数据。

浙公网安备 33010602011771号