Spark SQL

什么是Spark SQL

Spark SQL是spark处理结构化数据的一个模块,它提供了两个编程抽象:DataFrame和DataSet,并作为分布式sql的查询引擎
hive的工作原理是将任务转化 成MR,而Spark SQL是将Spark SQL转化成RDD,然后提交集群执行,效率高

Spark SQL 的特点

1.易整合
2.统一的数据访问方式
3.兼容hive
4.标准的数据连接

什么是DataFrame

DataFrame和RDD类似,也是一个分布式数据容器,DataFrame可以体现出数据存放的类型是什么,DataFrame也是懒执行

DataFrame性能比RDD高的原因

在这里插入图片描述

DataSet

Spark SQL命令

SparkSession

SparkSession是spark最新的sql查找起点,它是由SQLContext和HiveContext组合而成

创建SparkSession对象:

import org.apache.spark.sql.SparkSession
val spark=SparkSession.builder().getOrCreate()

读取数据创建DataFrame

var df=spark.read.json("file:///home/hduser/software/spark-2.1.1/examples/src/main/resources/people.json")

展示结果

df.show

SQL风格语法

//创建一个临时表people
df.createOrReplaceTempView("people")
//查询全表
var sprdf=spark.sql("select * from people")
注:临时表时Session范围中的,Session退出之后表就失效了。
//创建全局表
df.createGlobalTempView("people")
//查询局表
spark.sql("select * from global_temp.people").show()
//创建临时Session查表
spark.new Session().sql("select * from global_temp.people").show()

DSL风格语法

1)创建一个DataFrame
var df = spark.read.json(“file://路径”)
2)查看DataFrame的Schema信息
df.printSchema
3)只查看“name”
df.select(df(“name”)).show()
4)查看“name”和“age+1”
df.select(df(“name”),df(“age”)+1).show()

RDD转化成DataFrame

方法一

导包:

import spark.implicits._
import org.apache.spark.sql.catalyst.encoders.ExpressionEncoder
import org.apache.spark.sql.Encoder

1)创建RDD

var a=sc.textFile("file://路径")

2)切割RDD

var b=a.map(_.split(","))

3)创建样例类

case class Person(name:String,age:int)

4)创建样例对象类的RDD

var c=b.map(line => Person(line(0),line(1).toInt))

5)RDD转化成DataFrame

var df = c.toDF

6)创建视图

df.createOrReplaceTempView("people")

7)用sql语句查询

spark.sql("select * from people")

方法二

1)创建RDD
var a= sc.textFile(“file://路径”)
2)切分RDD
var b=a.map(_.split(","))
3)创建Row对象的RDD
var c= b.map(line=>Row(line(0),line(1).toInt))
4)创建DataFrame元数据
var structType=StructType(Array(
StructField(“name”,StringType,true),
StructField(“age”,IntegerType,true)
))
5)将RDD转化成DataFrame
val df = spark.createDataFrame(c,structType)
6)创建视图
df.createOrReplaceTempView(“people”)
7)用sql查询
spark.sql(“select * from people”)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值