我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Spark(十一)【SparkSQL的基本使用】

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Spark(十一)【SparkSQL的基本使用】


	Spark(十一)【SparkSQL的基本使用】
[数据库教程]

一. SparkSQL简介

Spark SQL是Spark用于结构化数据(structured data)处理的Spark模块。

Dremel ------> Drill(Apache)------>Impala(Cloudrea) Presto(Hotonworks)

Hive -------> Shark(对Hive的模仿,区别在于使用Spark进行计算)

Shark------->SparkSQL(希望拜托对Hive的依赖,兼容Hive)

SparkSQL: 如果使用SparkSQL执行Hive语句! 这种行为称为 Spark on Hive

? 如果使用Hive,执行Hive语句,但是在配置Hive时,修改了Hive的执行引擎,将执行引擎修改为了Spark! 这种行为称为Hive on Spark!

特点

  • 易整合。 在程序中既可以使用SQL,还可以使用API!
  • 统一的数据访问。 不同数据源中的数据,都可以使用SQL或DataFrameAPI进行操作,还可以进行不同数据源的Join!
  • 对Hive的无缝支持
  • 支持标准的JDBC和ODBC

二. 数据模型

DataFrame:DataFrame是一种以RDD为基础的分布式数据集,类似于传统数据库中的二维表格。

DataSet:是DataFrame的一个扩展,类似于数据库中的表。

区别

DataSet是强类型。DataSet=DataSet[Person].

DataFrame是弱类型。DataFrame=DataSet[Row],是DataSet的一个特例。

三. SparkSQL核心编程

Spark Core:要执行应用程序,要首先构建上下文环境对象SparkContext.

SparkSQL

老的版本中,提供两种SQL查询起始点:一个叫SQLContext,用于Spark自己提供的SQL查询;一个叫HiveContext,用于连接Hive的查询。

最新的版本SparkSQL的查询入口是SparkSession。是SQLContext和HiveContext的组合,SparkSession内部封装了SparkContext

1. IDEA开发SparkSQL

pom依赖

    
        org.apache.spark
        spark-core_2.12
        3.0.0
    
    
        org.apache.spark
        spark-sql_2.12
        3.0.0
    

2. SparkSession

创建和关闭
 import org.apache.spark.SparkConf
 import org.apache.spark.sql.SparkSession
  
  @Before
  def innit: Unit = {
    val conf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("MyApp")
    val session: SparkSession = SparkSession.builder().config(conf).getOrCreate()
  }

  
  @After
  def stop: Unit = {
    session.stop()
  }
获取SparkContext
   session.sparkContext  //获取SparkSession中的SparkContext

3. DataFrame

3.1 入门案例
  
  @Test
  def createDF: Unit = {
    //数据格式:{"username":"zhangsan","age":20}
    //读取json格式文件创建DataFrame
    val df: DataFrame = session.read.json("input/1.txt")
    //创建临时视图:person
    df.createOrReplaceTempView("person")
    //查看person表
    df.show()
    //通过sql查询
    session.sql(
      """
        |select
        |*
        |from
        |person
        |""".stripMargin).show()
  }
3.2 显示数据
df.show()
3.3 创建DF

①读取数据源创建

session.read
csv   format   jdbc   json   load   option   options   orc   parquet   schema   table text   textFile

②通过RDD创建DataFrame

样例类??

实际开发中,一般通过样例类将RDD转换为DataFrame

先导入隐式转换包,通过rdd.toDF()方法转换

 
 case class Person(name: String, age: Int)
  
  
  @Test
  def creatDFByRDD {
    val conf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("MyApp")
    val session: SparkSession = SparkSession.builder().config(conf).getOrCreate()
    //根据样例类创建RDD
    val rdd: RDD[(String, Int)] = session.sparkContext.makeRDD(List(("zhangsan", 12), ("lisi", 45), ("wangwu", 23)))
    val person_RDD: RDD[Person] = rdd.map {
      case (name, age) => Person(name, age)
    }
    //导入隐式包,session是上文创建的SparkSession对象
    import session.implicits._
    val df: DataFrame = person_RDD.toDF()
    //查看DF
    df.show()
    session.stop()
  }

③从hive表查询**

3.4 SQL查询语法

首先由DataFrame创建一个视图,然后用Sql语法操作


//临时视图
createOrReplaceTempView("视图名")  //不会报错
createTempView("视图名") //视图名已存在,会报错
//永久视图
df.createGlobalTempView("person")


//临时视图:person
//查询全局视图需要添加:global_temp.person
    session.sql(
      """
        |select
        |*
        |from
        |person
        |""".stripMargin).show()

注意:普通临时表是Session范围内的,如果想应用范围内有效,可以使用全局临时表。使用全局临时表时需要全路径访问,如:global_temp.people

4. DataSet

DataSet是具有强类型的数据集合,需要提供对应的类型信息。

4.1 创建DS

样例类RDD创建

 
 case class Person(name: String, age: Int)
 
 
  
  @Test
  def creatDFByRDD {
    val conf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("MyApp")
    val session: SparkSession = SparkSession.builder().config(conf).getOrCreate()
    //根据样例类创建RDD
    val rdd: RDD[(String, Int)] = session.sparkContext.makeRDD(List(("zhangsan", 12), ("lisi", 45), ("wangwu", 23)))
    val person_RDD: RDD[Person] = rdd.map {
      case (name, age) => Person(name, age)
    }
    //导入隐式包,session是上文创建的SparkSession对象
    import session.implicits._
    val df: Dataset[Person] = person_RDD.toDS()
    //查看DF
    df.show()
    session.stop()
  }

基本类型的序列创建DataSet

val list: Seq[Int] = List(1, 2, 3, 4)
import session.implicits._
val df1 = list.toDS()

注意:在实际使用的时候,很少用到把序列转换成DataSet,更多的是通过RDD来得到DataSet

5. RDD、DataFrame、DataSet

三者的关系

技术图片

相互转换

技术图片

总结:在对DataFrame和Dataset进行操作许多操作都需要这个包:import spark.implicits._(在创建好SparkSession对象后尽量直接导入)

Spark(十一)【SparkSQL的基本使用】

原文地址:https://www.cnblogs.com/wh984763176/p/13455059.html

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Spark(十一)【SparkSQL的基本使用】

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Spark(十一)【SparkSQL的基本使用】

一. SparkSQL简介Spark SQL是Spark用于结构化数据(structured data)处理的Spark模块。Dremel ---- Drill(Apache)----Impala(Cloudrea) Presto(Hotonworks)H
Spark(十一)【SparkSQL的基本使用】
2020-10-05

怎么进行spark的基本算子使用和源码解析

这篇文章将为大家详细讲解有关怎么进行spark的基本算子使用和源码解析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一.coalesce1.coalesce源码2.coalesce解释是窄依
2023-06-02

一文详解Golang中consul的基本使用

consul是一个开源服务注册和服务发现的中心,可以用于微服务的注册和服务之间的调用的发现,帮助上游服务找到下游服务的具体ip:port或者是domain,也可以使用dns的方式让consul帮你去做转发。本文就来讲讲它的具体使用吧
2023-03-06

PyCharm的基本使用

PyCharm是我一直在使用的python编辑器,今天具体讲一下PyCharm的使用。下载首先是下载PyCharm,PyCharm的下载地址:https://www.jetbrains.com/pycharm/这个是一个商业软件,大家可以选
2023-06-02

Android Button的基本使用

Android Button是一个常用的用户界面控件,用于在应用程序中显示可点击的按钮。以下是Android Button的基本使用方法:1. 在XML布局文件中添加Button控件:```android:id="@+id/button_i
2023-09-15

1.2 Spyder的基本使用

目录 1.0 Spyder的基本使用 (一)安装Anaconda: (二)Spyder的主题与文字修改: 1.默认主题: 2.修改主题:
2023-01-30

python-pptx的基本使用

1.引入python-pptxfrompptximportpresentation# 实例化Presentationprs= Presentation()2.ppt模板的选择a、使用ppt自带的模板prs= Presentation()pr
2023-01-31

Node.js的基本使用3

koa是express超集(进阶版)面向过程 -》 面向对象 --》 面向服务分类: 关系型数据库: MySql非关系型数据库: MongoDB环境变量设置系统服务添加有问题安装系统不太支持高版本、 降版本 3.2 3.4 写在mong
2023-01-31

android的RecylerView基本使用

文章目录一、RecylerView基本使用1. 添加依赖2. 添加布局3. 添加adapter4. 添加item_recycler.xml5. MainActivity代码6. 效果7. 代码地址二、RecyclerView-setLayo
2022-06-06

编程热搜

目录