实训笔记——Spark SQL编程

这篇具有很好参考价值的文章主要介绍了实训笔记——Spark SQL编程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Spark SQL编程

Spark SQL属于Spark计算框架的一部分,是专门负责结构化数据的处理计算框架,Spark SQL提供了两种数据抽象:DataFrame、Dataset,都是基于RDD之上的一种高级数据抽象,在RDD基础之上增加了一个schema表结构。

一、准备Spark SQL的编程环境

1.1 创建Spark SQL的编程项目,scala语言支持的

1.2 引入编程依赖:

spark_core_2.12

hadoop_hdfs

spark_sql_2.12

hadoop的有一个依赖jackson版本和scala2.12版本冲突了,Spark依赖中也有这个依赖,但是默认使用的是pom.xml先引入的那个依赖,把hadoop中jackson依赖排除了即可。

<dependency>      
    <groupId>org.apache.hadoop</groupId>      
    <artifactId>hadoop-hdfs</artifactId>      
    <version>3.1.4</version>      
    <exclusions>        
    	<exclusion>          
        <groupId>com.fasterxml.jackson.module</groupId>          
        <artifactId>*</artifactId>        
        </exclusion>        
        <exclusion>          
            <groupId>com.fasterxml.jackson.core</groupId>        
            <artifactId>*</artifactId>        
        </exclusion>      
    </exclusions>    
</dependency>

二、Spark SQL程序编程的入口

2.1 SQLContext

SQLContext:只能做SQL编程,无法操作Hive以及使用HQL操作

2.2 HiveContext

HiveContext:专门提供用来操作和Hive相关的编程

2.3 SparkSession

SparkSession:全新的Spark SQL程序执行入口,把SQLContext和HiveContext功能全部整合了,SparkSession底层封装了一个SparkContext,而且SparkSession可以开启Hive的支持

三、DataFrame的创建

DataFrame是以前旧版本的数据抽象(untyped类型的数据抽象),Dataset是新版本的数据抽象(typed有类型的数据抽象),新版本当中DataFrame底层就是Dataset[Row]

3.1 使用隐式转换函数

使用隐式转换函数从RDD、Scala集合创建DataFrame toDF() toDF(columnName*)

机制

如果集合或者RDD的类型不是Bean,而且再toDF没有传入任何的列名,那么Spark会默认按照列的个数给生成随机的列名,但是如果类型是一个Bean类型,那么toDF产生的随机列名就是bean的属性名

3.2 通过SparkSession

通过SparkSession自带的createDataFrame函数从集合或者RDD中创建DataFrame

3.3 从Spark SQL

Spark SQL支持的数据源创建DataFrame(HDFS、Hive、JSON文件、CSV文件等等)

3.3.1 HDFS、本地文件系统创建
  1. 普通的文本文档
  2. CSV文件
  3. JSON文件
  4. ORC文件
  5. Parquet文件

ss.read.option(xxx,xxx).csv/json/text/orc/parquet(path)

3.3.2 JDBC支持的数据库数据源创建

ss.read.jdbc(url,table,properties)

3.3.3 Spark SQL On Hive创建

使用Hive做数据存储,使用Spark SQL读取Hive的数据进行处理

有个提前的准备

  1. 开启SparkSession的Hive支持
  2. 引入spark-hive的编程依赖
  3. 还需要将Hive的配置文件hive-site.xml放到指定的位置

ss.sql(“HQL语句”)

3.3.1 外部存储HDFS中读取数据成为DataFrame

ss.read.format("jsonxx").load("path") 不太好用

ss.read.option(key,value).option(....).csv/json(path)

3.3.2 从jdbc支持的数据库创建DataFrame

ss.read.jdbc(url,table,properties)

3.3.3 读取Hive数据成为DataFrame
  1. 通过SparkSession开启Hive的支持
  2. 引入spark-hive的编程依赖
  3. 通过ss.sql()

3.4 从其他的DataFrame转换的来

四、DataFrame的编程风格

通过代码来操作计算DataFrame中数据

4.1 SQL编程风格

Dataset提供的一系列转换算子来进行操作

4.1.1 将创建的DataFrame或者Dataset转换成为一张临时表格
4.1.2 然后通过ss.sql(sql语句)进行数据的查询

4.2 DSL编程风格

DataFrame和Dataset提供了一系列的API操作,API说白了就是Spark SQL中算子操作,可以通过算子操作来获取DataFrame或者Dataset中的数据

4.2.1 转换算子

RDD具备的算子DataFrame基本上都可以使用

DataFrame还增加了一些和SQL操作有关的算子: selectExpr、where/filter、groupBy、orderBy/sort、limit、join

4.2.2 行动算子

RDD具备的行动算子DataFrame和Dataset也都具备一些

函数名 说明
collect/collectAsList 不建议使用,尤其是数据量特别庞大的情况下
foreach/foreachPartition 获取结果集的一部分数据
first/take(n)/head(n)/takeAsList(n)/tail(n) 获取的返回值类型就是Dataset存储的数据类型
printSchema 获取DataFrame或者Dataset的表结构的
show()
show(num,truncate:boolean)
show(num,truncate:Int)
show(num,truncate:Int,ver:boolean)

保存输出的算子

  1. 文件系统

    1. df/ds.write.mode(SaveMode).csv/json/parquet/orc/text(path--目录)
    2. text纯文本文档要求DataFrame和Dataset的结果集只有一列 而且列必须是String类型
  2. JDBC支持的数据库

  3. Hive

五、DataSet的创建和使用

Dataset有类型,DataFrame无类型的。

5.1 创建

5.1.1 隐式转换,toDS()
5.1.2 通过SparkSession的createDataset函数创建
5.1.3 通过DataFrame转换得到Dataset df.as[类型-Bean对象必须有getter、setter方法] 也是需要隐式转换的

六、Spark SQL的函数操作

Spark SQL基本上常见的MySQL、Hive中函数都是支持的

6.1 Spark SQL特点

6.1.1 易整合
6.1.2 统一的数据访问方式
6.1.3 兼容Hive
6.1.4 标准的数据库连接

6.2 自定义函数

ss.udf.register(name,函数)文章来源地址https://www.toymoban.com/news/detail-729958.html

到了这里,关于实训笔记——Spark SQL编程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spark大数据处理讲课笔记4.1 Spark SQL概述、数据帧与数据集

      目录 零、本讲学习目标 一、Spark SQL (一)Spark SQL概述 (二)Spark SQL功能 (三)Spark SQL结构 1、Spark SQL架构图 2、Spark SQL三大过程 3、Spark SQL内部五大组件 (四)Spark SQL工作流程 (五)Spark SQL主要特点 1、将SQL查询与Spark应用程序无缝组合 2、Spark SQL以相同方式连接多种数据

    2024年02月09日
    浏览(57)
  • Spark【Spark SQL(二)RDD转换DataFrame、Spark SQL读写数据库 】

    Saprk 提供了两种方法来实现从 RDD 转换得到 DataFrame: 利用反射机制推断 RDD 模式 使用编程方式定义 RDD 模式 下面使用到的数据 people.txt :         在利用反射机制推断 RDD 模式的过程时,需要先定义一个 case 类,因为只有 case 类才能被 Spark 隐式地转换为DataFrame对象。 注意

    2024年02月09日
    浏览(44)
  • Spark学习(6)-Spark SQL

    SparkSQL是Spark的一个模块, 用于处理 海量结构化数据 。 SparkSQL是非常成熟的 海量结构化数据处理框架. 学习SparkSQL主要在2个点: SparkSQL本身十分优秀, 支持SQL语言性能强可以自动优化API简单兼容HIVE等等。 企业大面积在使用SparkSQL处理业务数据。 离线开发 数仓搭建 科学计算

    2024年02月16日
    浏览(60)
  • Spark【Spark SQL(三)DataSet】

             DataFrame 的出现,让 Spark 可以更好地处理结构化数据的计算,但存在一个问题:编译时的类型安全问题,为了解决它,Spark 引入了 DataSet API(DataFrame API 的扩展)。DataSet 是分布式的数据集合,它提供了强类型支持,也就是给 RDD 的每行数据都添加了类型约束。  

    2024年02月09日
    浏览(31)
  • Spark 7:Spark SQL 函数定义

    SparkSQL 定义UDF函数 方式1语法: udf对象 = sparksession.udf.register(参数1,参数2,参数3) 参数1:UDF名称,可用于SQL风格 参数2:被注册成UDF的方法名 参数3:声明UDF的返回值类型 udf对象: 返回值对象,是一个UDF对象,可用于DSL风格 方式2语法: udf对象 = F.udf(参数1, 参数2) 参数

    2024年02月11日
    浏览(35)
  • 大数据技术之Spark——Spark SQL

            Spark SQL是Spark用于结构化数据处理的Spark模块。         我们之前学习过hive,hive是一个基于hadoop的SQL引擎工具,目的是为了简化mapreduce的开发。由于mapreduce开发效率不高,且学习较为困难,为了提高mapreduce的开发效率,出现了hive,用SQL的方式来简化mapreduce:hiv

    2024年02月12日
    浏览(36)
  • Spark的生态系统概览:Spark SQL、Spark Streaming

    Apache Spark是一个强大的分布式计算框架,用于大规模数据处理。Spark的生态系统包括多个组件,其中两个重要的组件是Spark SQL和Spark Streaming。本文将深入探讨这两个组件,了解它们的功能、用途以及如何在Spark生态系统中使用它们。 Spark SQL是Spark生态系统中的一个核心组件,它

    2024年02月01日
    浏览(32)
  • 【Spark】Spark SQL基础使用详解和案例

    Spark SQL是Apache Spark的一个模块,它提供了一种基于结构化数据的编程接口。 Spark SQL支持结构化数据的处理,包括数据的读取、转换和查询。它可以将传统的基于表和SQL的操作和Spark的分布式计算相结合,提供强大的数据处理和分析能力。 Spark SQL也可以与其他Spark组件集成,如

    2024年02月15日
    浏览(31)
  • Hudi-集成Spark之spark-sql方式

    启动spark-sql 创建表 建表参数: 参数名 默认值 说明 primaryKey uuid 表的主键名,多个字段用逗号分隔。同 hoodie.datasource.write.recordkey.field preCombineField 表的预合并字段。同 hoodie.datasource.write.precombine.field type cow 创建的表类型: type = ‘cow’ type = \\\'mor’同 hoodie.datasource.write.table.ty

    2024年02月05日
    浏览(34)
  • DataGrip编写SQL语句操作Spark(Spark ThriftServer)

    Spark ThriftServer 相当于一个持续性的Spark on Hive集成模式,可以启动并监听在10000端口,持续对外提供服务,可以使用数据库客户端工具或代码连接上来,操作Spark bin/spark-sql 脚本,类似于Hive的 bin/hive脚本 ( 内部内置了hive的hiveServer2服务或Spark执行引擎,每次脚本执行,都会启动

    2024年02月12日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包