【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()

相关推荐
Andreapiki34 分钟前
数据分析师校招技术备考指南:SQL、Python、统计学、BI学习路径
sql·excel
星空34 分钟前
sql查询修改
sql·金蝶
liangshanbo12152 小时前
面试题:页面需要发起大量 Ajax / HTTP 请求时,如何优化请求性能?
前端·http·ajax
RobinDevNotes4 小时前
JAX 分布式训练,和 PyTorch 有什么不一样
人工智能·深度学习·ajax
小七在进步4 小时前
类和对象(四)
java·javascript·ajax
User_芊芊君子5 小时前
数据库手记:从数据建模到 Spark 对接的实测记录
大数据·数据库·spark
Andreapiki5 小时前
数字化审计校招技术备考指南:SQL、Python、BI、RPA学习路径
python·sql·rpa
计算机源码社6 小时前
【27届大数据毕设】基于Spark的TikTok短视频属性分享与互动比率可视化分析系统 基于机器学习的TikTok短视频认证属性与互动效能关联分析
大数据·hadoop·python·机器学习·spark·毕业设计·课程设计
IT研究室6 小时前
最新大数据毕业设计选题推荐-基于大数据的生活指数分析与可视化-大数据-Spark-Hadoop-Bigdata
大数据·信息可视化·数据分析·spark·课程设计
鼓掌MVP16 小时前
SQL 语句是一个典型的 DDL
sql·ddl