SparkSQL 基础编程

一、介绍

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

2.1 dataframe 介绍

在 Spark 中,DataFrame 是一种以 RDD 为基础的分布式数据集,类似于传统数据库中的二维表格。DataFrame 与 RDD 的主要区别在于,前者带有 schema 元信息,即 DataFrame 所表示的二维表数据集的每一列都带有名称和类型。这使得 Spark SQL 得以洞察更多的结构信息,从而对藏于 DataFrame 背后的数据源以及作用于 DataFrame 之上的变换进行了针对性的优化,最终达到大幅提升运行时效率的目标。反观 RDD,由于无从得知所存数据元素的具体内部结构,Spark Core 只能在 stage 层面进行简单、通用的流水线优化。同时,与 Hive 类似,DataFrame 也支持嵌套数据类型(struct、array 和 map)。从 API 易用性的角度上看,DataFrame API 提供的是一套高层的关系操作,比函数式的 RDD API 要更加友好,门槛更低。

2.2 dataframe 使用

1、创建 dataframe
(1) 从 Spark 数据源进行创建
A、查看 Spark 支持创建文件的数据源格式

scala> spark.read.
csv      jdbc   load     options   parquet   table   textFile   
format   json   option   orc       schema    text               

B、创建 user.json 文件

[root@hadoop151 data]# cat user.json 
{
   "username":"zhangsan","age":20}

C、读取 json 文件创建 dataframe

scala> var df = spark.read.json("/opt/module/spark/data/user.json")
df: org.apache.spark.sql.DataFrame = [age: bigint, username: string]         
+---+--------+                                                                  
|age|username|
+---+--------+
| 20|zhangsan|
+---+--------+

(2) 从 RDD 进行转换

(3) 从 Hive Table 进行查询返回

2、SQL 语法
SQL 语法风格是指我们查询数据的时候使用 SQL 语句来查询,这种风格的查询必须有临时视图或者全局视图来辅助。
A、读取 JSON 文件创建 DataFrame

scala> val df = spark.read.json("/opt/module/spark/data/user.json")
df: org.apache.spark.sql.DataFrame = [age: bigint, username: string] 

B、对 DataFrame 创建一个临时表

scala> df.createOrReplaceTempView("people")

C、通过 SQL 语句实现查询全表

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

D、结果展示

scala> sqlDF.show
+---+--------+                                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值