
1.2 Spark SQL能做什么
现在我们知道了Spark SQL是怎么来的,那么Spark SQL到底能做些什么呢?下面我们根据ETL(数据的抽取、转换、加载)的三个过程来讲解一下Spark SQL的作用。
(1)抽取(Extract):Spark SQL可以从多种文件系统(HDFS、S3.本地文件系统等)、关系型数据库(MySQL、Oracle、PostgreSQL等)或NoSQL数据库(Cassandra、HBase、Druid等)中获取数据,Spark SQL支持的文件类型可以是CSV、JSON、XML、Parquet、ORC、Avro等。得益于Spark SQL对多种数据源的支持,Spark SQL能从多种渠道抽取人们想要的数据到Spark中。
(2)转换(Transform):我们常说的数据清洗,比如空值处理、拆分数据、规范化数据格式、数据替换等操作。Spark SQL能高效地完成这类转换操作。
(3)加载(Load):在数据处理完成之后,Spark SQL还可以将数据存储到各种数据源(前文提到的数据源)中。
如果你以为Spark SQL只能做上面这些事情,那你就错了。Spark SQL还可以作为一个分布式SQL查询引擎通过JDBC或ODBC或者命令行的方式对数据库进行分布式查询。Spark SQL中还有一个自带的Thrift JDBC/ODBC服务,可以用Spark根目录下的sbin文件夹中的start-thriftserver.sh脚本启动这个服务。Spark中还自带了一个Beeline的命令行客户端,读者可以通过这个客户端连接启动的Thrift JDBC/ODBC,然后提交SQL。
如果你以为Spark SQL能做的只有这些,那你就错了。Spark SQL还可以和Spark的其他模块搭配使用,完成各种各样复杂的工作。比如和Streaming搭配处理实时的数据流,和MLlib搭配完成一些机器学习的应用。