spark sql读取hive底层_sparkSQL原理和使用——一般在生产中,基本都是使用hive做数据仓库存储数据,然后用spark从hive读取数据进行处理...

本文介绍了Spark SQL的基本原理和使用,包括DataFrame与DataSet的概念,以及如何通过SparkSession创建DataFrame。重点讨论了在生产环境中,如何利用Spark SQL从Hive数据仓库中读取数据进行处理,强调了其与Hive的兼容性和高效率。同时,文章通过案例展示了创建DataFrame的多种方式,如使用case class和StructType,以及直接读取json文件。
摘要由CSDN通过智能技术生成

1.1 什么是spark SQL

​ Spark SQL是Spark用来处理结构化数据的一个模块,它提供了一个编程抽象叫做DataFrame并且作为分布式SQL查询引擎的作用。类似于hive的作用。

1.2 spark SQL的特点

1、容易集成:安装Spark的时候,已经集成好了。不需要单独安装。

2、统一的数据访问方式:JDBC、JSON、Hive、parquet文件(一种列式存储文件,是SparkSQL默认的数据源,hive中也支持)

3、完全兼容Hive。可以将Hive中的数据,直接读取到Spark SQL中处理。

一般在生产中,基本都是使用hive做数据仓库存储数据,然后用spark从hive读取数据进行处理。

4、支持标准的数据连接:JDBC、ODBC

5、计算效率比基于mr的hive高,而且hive2.x版本中,hive建议使用spark作为执行引擎

二、spark SQL基本原理

2.1 DataFrame和DataSet基本概念

2.1.1 DataFrame

DataFrame是组织成命名列的数据集。它在概念上等同于关系数据库中的表,里面有表的结构以及数据,但在底层具有更丰富的优化。DataFrames可以从各种来源构建,

例如:

结构化数据文件

hive中的表

外部数据库或现有RDDs

DataFrame API支持的语言有Scala,Java,Python和R。

​ 比起RDD,DataFrame多了数据的结构信息,即schema。RDD是分布式的

Java对象的集合。DataFrame是分布式的Row对象的集合。DataFrame除了提供了比RDD更丰富的算子以外,更重要的特点是提升执行效率、减少数据读取以及执行计划的优化。

2.1.2 DataSet

Dataset是一个分布式的数据收集器。这是在Spark1.6之后新加的一个接口,兼顾了RDD的优点(强类型,可以使用功能强大的lambda)以及Spark

SQL的执行器高效性的优点。所以可以把DataFrames看成是一种特殊的Datasets,即:Dataset(Row)

2.2 创建DataFrame的方式

2.2.1 SparkSession对象

​ Apache Spark

2.0引入了SparkSession,其为用户提供了一个统一的切入点来使用Spark的各项功能,并且允许用户通过它调用DataFrame和Dataset相关API来编写Spark程序。最重要的是,它减少了用户需要了解的一些概念,使得我们可以很容易地与Spark交互。

在2.0版本之前,与Spark交互之前必须先创建SparkConf和SparkContext。然而在Spark

2.0中,我们可以通过SparkSession来实现同样的功能,而不需要显式地创建SparkConf, SparkContext 以及

SQLContext,因为这些对象已经封装在SparkSession中。

​ 要注意一点,在我用的这个spark版本中,直接使用new SQLContext() 来创建SQLContext对象,会显示该方式已经被弃用了(IDEA中会显示已弃用),建议使用SparkSession来获取SQLContext对象。

2.2.2 通过case class样本类

这种方式在scala中比较常用,因为case class是scala的特色

/**

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值