数据读取和保存

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.这个输入格式会返回键值对数据。

posted @ 2018-03-20 20:36  blog_hfg  阅读(264)  评论(0)    收藏  举报