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

相关推荐
我登哥MVP25 分钟前
Ajax 详解
java·前端·ajax·javaweb
仲夏幻境4 小时前
js利用ajax同步调用如何
开发语言·javascript·ajax
寒月霜华4 小时前
JavaWeb前端-Ajax
ajax
武昌库里写JAVA5 小时前
C语言 函数指针和指针函数区别 - C语言零基础入门教程
vue.js·spring boot·sql·layui·课程设计
蒙特卡洛的随机游走6 小时前
Spark核心数据(RDD、DataFrame 和 Dataset)
大数据·分布式·spark
蒙特卡洛的随机游走8 小时前
Spark的宽依赖与窄依赖
大数据·前端·spark
Lansonli9 小时前
大数据Spark(六十九):Transformation转换算子intersection和subtract使用案例
大数据·分布式·spark
冻咸鱼9 小时前
MySQL中表操作
android·sql·mysql·oracle
TDengine (老段)9 小时前
TDengine 数据函数 LEAST 用户手册
大数据·数据库·sql·时序数据库·tdengine
蹦极的考拉11 小时前
PHPCMS V9 自定义证书查询模块(Ajax+防刷+倒计时)
ajax·证书查询·phpcmsv9表单