【Spark征服之路-3.2-Spark-SQL核心编程(一)】

Spark Core 中,如果想要执行应用程序,需要首先构建上下文环境对象 SparkContext, Spark SQL 其实可以理解为对 Spark Core 的一种封装,不仅仅在模型上进行了封装,上下文环境对象也进行了封装。

在老的版本中,SparkSQL 提供两种 SQL 查询起始点:一个叫 SQLContext,用于 Spark 自己提供的 SQL 查询;一个叫 HiveContext,用于连接 Hive 的查询。 SparkSession 是 Spark 最新的 SQL 查询起始点,实质上是 SQLContext 和 HiveContext 的组合,所以在 SQLContext 和 HiveContext 上可用的 API 在 SparkSession 上同样是可以使用的。SparkSession 内部封装了 SparkContext,所以计算实际上是由 sparkContext 完成的。当 我们使用 spark-shell 的时候, spark 框架会自动的创建一个名称叫做 spark 的 SparkSession 对象, 就像我们以前可以自动获取到一个 sc 来表示 SparkContext 对象一样。

DataFrame

Spark SQL 的 DataFrame API 允许我们使用 DataFrame 而不用必须去注册临时表或者生成 SQL 表达式。DataFrame API 既有 transformation 操作也有 action 操作。

创建 DataFrame

在 Spark SQL 中 SparkSession 是创建 DataFrame 和执行 SQL 的入口,创建 DataFrame

有三种方式:通过 Spark 的数据源进行创建;从一个存在的 RDD 进行转换;还可以从 Hive

Table 进行查询返回。

从 Spark 数据源进行创建

Spark-SQL支持的数据类型:

➢ 在 spark 的 bin/data 目录中创建 user.json 文件

{"username":"zhangsan","age":20}

{"username":"lisi","age":17}

➢ 读取 json 文件创建 DataFrame

val df = spark.read.json("data/user.json")

注意:如果从内存中获取数据,spark 可以知道数据类型具体是什么。如果是数字,默认作为 Int 处理;但是从文件中读取的数字,不能确定是什么类型,所以用 bigint 接收,可以和 Long 类型转换,但是和 Int 不能进行转换。

展示数据:

d f.show

SQL 语法

SQL 语法风格是指我们查询数据的时候使用 SQL 语句来查询,这种风格的查询必须要

有临时视图或者全局视图来辅助

  1. 读取 JSON 文件创建 DataFrame

val df1 = spark.read.json("data/user.json")

  1. 对 DataFrame 创建一个临时表

df1.createOrReplaceTempView("people")

  1. 通过 SQL 语句实现查询全表

val sqlDF = spark.sql("select * from people")

  1. 结果展示

s qlDF.show

  1. 对于 DataFrame 创建一个全局表

df1.createGlobalTempView("people1")

第一次运行全局表会出现这个错误,需要将虚拟中的hive-site.xml文件复制到spark的conf路径下(最好能将整个hive目录放在本地文件系统中)

配置完成之后再执行语句:

df1.createGlobalTempView("people1")

  1. 通过 SQL 语句实现查询全表

spark.sql("SELECT * FROM global_temp.people1").show()

spark.newSession().sql("SELECT * FROM global_temp.people1").show()

相关推荐
大牧师10 小时前
TypeORM 入门教程
后端·sql·mysql·orm·nest·typeorm
RunProof可证工程10 小时前
AI 写的登录接口能跑,上线前我却查出 SQL 注入写法
sql·代码规范
YangYang9YangYan12 小时前
校招视角|财务数字化岗位 SQL、工具、项目完整备考指南
大数据·数据库·sql
BYSJMG14 小时前
计算机毕设选题推荐:基于大数据的公共交通运营数据分析与可视化,Spark+K-Means聚类城市运营模式
大数据·hadoop·信息可视化·数据分析·spark·kmeans·课程设计
编程_大白18 小时前
IDEA配置SQL方言
java·sql·intellij-idea
霸道流氓气质18 小时前
MyBatis 与 SQL 层面关键技术详解
windows·sql·mybatis
云贝贝贝18 小时前
MySQL 运维高频 6 坑:字符集、超时、SQL_MODE、隐式转换、Online DDL、主从延迟
运维·sql·mysql
2501_9336707918 小时前
采购运营校招Excel能力清单:函数、透视表、ERP数据与SQL入门
数据库·sql·excel
冰暮流星1 天前
mysql之左外连接与右外连接
数据库·sql