SparkSQL 入门简介

news2024/9/27 15:27:49

在安装目录的bin目录打开spark-shell.cmd,输入如下,按tab健,查看可执行数据源

spark.read.

在这里插入图片描述
在安装目录D:\spark-3.0.0-bin-hadoop3.2\bin\input新建user.json

{"username":"chen","age":3}
{"username":"chen2","age":4}
{"username":"chen3","age":5}

SQL 语法

执行如下,获取json数据源

val df=spark.read.json("D:\\spark-3.0.0-bin-hadoop3.2\\bin\\input\\user.json")

回车,再输入

df.show

得到如下结果
在这里插入图片描述
创建临时视图

df.createTempView("user")

创建临时视图,替换原来表,防止重复

df.createOrReplaceTempView("user")

接下来就可以用sql语句查表了

spark.sql("select * from user").show

得到如下结果
在这里插入图片描述
查某个字段

spark.sql("select username from user").show

在这里插入图片描述

DSL 语法

查看 DataFrame 的 Schema 信息

df.printSchema

在这里插入图片描述
查看DataFrame里面的方法

df.

在这里插入图片描述
计算年龄加1

df.select('username, 'age + 1 as "age").show()

在这里插入图片描述
查看age大于30的数据

df.filter($"age">30).show

按照"age"分组,查看数据条数

df.groupBy("age").count.show

DataFrame 转换为 RDD

val rdd=sc.makeRDD(List(1,2))

在这里插入图片描述
查看rdd命令
在这里插入图片描述

val df= rdd.toDF("id")

在这里插入图片描述

df.show

在这里插入图片描述

创建 DataSe

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

在这里插入图片描述

 val caseClassDS = Seq(Person("zhangsan",2)).toDS()
 caseClassDS.show

在这里插入图片描述

RDD、DataFrame、DataSet 三者的关系

在 SparkSQL 中 Spark 为我们提供了两个新的抽象,分别是 DataFrame 和 DataSet。他们和 RDD 有什么区别呢?首先从版本的产生上来看:

➢ Spark1.0 => RDD
➢ Spark1.3 => DataFrame
➢ Spark1.6 => Dataset

如果同样的数据都给到这三个数据结构,他们分别计算之后,都会给出相同的结果。不同是的他们的执行效率和执行方式。在后期的 Spark 版本中,DataSet 有可能会逐步取代 RDD和 DataFrame 成为唯一的 API 接口。

三者的共性

➢ RDD、DataFrame、DataSet 全都是 spark 平台下的分布式弹性数据集,为处理超大型数据提供便利;

➢ 三者都有惰性机制,在进行创建、转换,如 map 方法时,不会立即执行,只有在遇到Action 如 foreach 时,三者才会开始遍历运算;

➢ 三者有许多共同的函数,如 filter,排序等;

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

➢ 三者都会根据 Spark 的内存情况自动缓存运算,这样即使数据量很大,也不用担心会内存溢出

➢ 三者都有 partition 的概念

➢ DataFrame 和 DataSet 均可使用模式匹配获取各个字段的值和类型

三者的区别

  1. RDD

➢ RDD 一般和 spark mllib 同时使用
➢ RDD 不支持 sparksql 操作

  1. DataFrame

➢ 与 RDD 和 Dataset 不同,DataFrame 每一行的类型固定为 Row,每一列的值没法直接访问,只有通过解析才能获取各个字段的值

➢ DataFrame 与 DataSet 一般不与 spark mllib 同时使用

➢ DataFrame 与 DataSet 均支持 SparkSQL 的操作,比如 select,groupby 之类,还能注册临时表/视窗,进行 sql 语句操作

➢ DataFrame 与 DataSet 支持一些特别方便的保存方式,比如保存成 csv,可以带上表头,这样每一列的字段名一目了然(后面专门讲解)

  1. DataSet

➢ Dataset 和 DataFrame 拥有完全相同的成员函数,区别只是每一行的数据类型不同。DataFrame 其实就是 DataSet 的一个特例 type DataFrame = Dataset[Row]

➢ DataFrame 也可以叫 Dataset[Row],每一行的类型是 Row,不解析,每一行究竟有哪些字段,各个字段又是什么类型都无从得知,只能用上面提到的 getAS 方法或者共性中的第七条提到的模式匹配拿出特定字段。而 Dataset 中,每一行是什么类型是不一定的,在自定义了 case class 之后可以很自由的获得每一行的信息

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/139892.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue全家桶-vuex(一)

vue全家桶-vuex(一)1.Vuex概述2.Vuex中的核心特性A.State1.this.$store.state.全局数据名称-组件访问State中的数据的第一种方式2.组件访问State中的数据的第二种方式:按需导入B.Mutation1.this.$store.commit是触发Mutation的第一种方式2.触…

java学习day67(乐友商城)商品详情及静态化(Thymeleaf)

1.商品详情 当用户搜索到商品,肯定会点击查看,就会进入商品详情页,接下来我们完成商品详情页的展示, 1.1.Thymeleaf 在商品详情页中,我们会使用到Thymeleaf来渲染页面,所以需要先了解Thymeleaf的语法。 …

简明Java讲义 1:Java环境搭建与入门

目录 1、Java 介绍 2、Java 运行机制 3、Java开发环境搭建 4、Hello World! 1、Java 介绍 Java是Sun微系统公司在1995年推出的,是一门面向对象的编程语言 2006年12月,Sun公司发布了JDK1.6(也称作Java SE 6) 200…

数位DP~

综述 数位DP的应用范围: 在某个区间内有多少个满足一定的性质 数位DP中使用的方法: 类似于前缀和。A到B相当于f[B] - a[A-1] 这一点尤为重要,因为已经弱化了边界,使得考虑的更少分情况讨论 ​ 1081. 度的数量 ​ 输入样例…

BGP综合实验

目录 1.拓扑图 2.实验要求 3.实验思路 4.主要配置 5.测试 6.实验总结 1.拓扑图 2.实验要求 AS1存在两个环回,一个地址为192.168.1.0/24;AS3中存在两个环回,一个为192.168.2.0/24;整个AS2的IP地址为172.16.0.0/16&#xff0c…

k8s之工作机制

写在前面 本文一起看下k8s基本架构。 1:Kubernetes的基本架构 k8s本身也是一种分布式架构,也需要在多台机器(实体机或虚拟机无差别)部署,部署的机器我们叫做节点,其中节点分为Master node即主节点,worke…

java使用反射给对象属性赋值

📢📢📢📣📣📣哈喽!大家好,我是「奇点」,江湖人称 singularity。刚工作几年,想和大家一同进步🤝🤝一位上进心十足的【Java ToB端大厂领…

高频js手写题之实现数组扁平化、深拷贝、总线模式

前言 古人学问无遗力,少壮工夫老始成。纸上得来终觉浅,绝知此事要躬行。看懂一道算法题很快,但我们必须将这道题的思路理清、手写出来。 三道js手写题的思路和代码实现 数组扁平化 演示效果 将[1, [1, 2], [1, [2]]] 变成 [1, 1, 2, 1, 2] 第一种&…

抽象类与抽象方法

文章目录一、abstract关键字使用修饰类:抽象类修饰方法:抽象方法注意点抽象类的匿名子类一、abstract关键字使用 abstract:抽象的 可以修饰:类、方法 修饰类:抽象类 1、此类不可进行实例化 2、抽象类中一定有构造器…

报错 cannot import name ‘int‘ from ‘numpy‘

报错详情: 原因是因为np.int在numpy1.20已经被废弃掉了,可以通过 pip show numpy在命令行里查看。 现在使用的是np.int_ 或者 np.int32 或者 np.int64 猜测原因 但这个报错是在我自己的site-packages里的numpy的报错,我怀疑可能是numpy本身…

【linux】crontab

文章目录crontab简介crontab安装语法实例脚本无法执行问题常用的命令展示crontab的注意事项来源crontab简介 crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中&a…

linux系统中CAN驱动的通信方法与原理

大家好,今天主要和大家分享一下,如何使用linux系统下的CAN驱动实验。 目录 第一:CAN通信基本简介 第二:CAN通信的主要特点 第三:CAN通信协议 第四:程序代码的具体实现 第五:使能Linux内核自…

MATLAB-ezplot绘图函数

ezplot 函数与fplot 函数类似,该函数可以绘制显函数图形、隐函数图形和参数方程图形。ezplot函数的调用格式如下。 ezplot(f) ezplot(f, [ min , max ]) ezplot(f.[ xmin , xmax , ymin , ymax]) ezplot(x,y) ezplot(x,y , [tmin , tmax]) ezplot(.. . ,f…

jvm内存管理

参考链接 参考链接 Garbage Collection Concepts garbage collector的作用包括: 分配内存确定活着的对象不被清理回收死了的对象占用的内存 寻找和释放垃圾占用的内存空间的过程称为garbage collection一般情况下,整个堆或堆的一部分被填满时或者达到…

C++11 多线程

线程(thread)是操作系统能够进行运算调度的最小单位,它被包含在进程中,是进程中的实际运作单位,一条线程指的是进程中一个单一顺序的控制流,一个进程可以并发多个线程,每条线程执行不同的任务。…

FreeRTOS教程——定时器(二)

Free RTOS定时器 一、概念 一、概论 软件定时器允许设置一段时间,当设置的时间到达之后就执行指定的功能函数,被定时器 调用的这个功能函数叫做定时器的回调函数。回调函数的两次执行间隔叫做定时器的定时周期, 简而言之,当定时…

switch分支结构

一. 简介switch结合case,能够判断一个变量或表达式与一系列值中的某个值是否相等,这里的每个值都被称为一个分支。switch语句在执行时,会先进行值的匹配,匹配成功时会进入到对应case语句。再根据是否有 break语句,判断…

手把手教你正确地创建并配置一个SpringBoot项目

文章目录1. 安装Spring Boot Helper插件2. 创建SpringBoot项目3. 配置SpringBoot项目4. 选择修改配置(选做)4.1 修改端口号4.2 其他自定义配置5. SpringBoot热部署本文主要是针对IDEA社区版用户的,如果你是专业版的用户,那么是可以…

RHCE第三天之ssh远程连接服务

文章目录一、连接加密技术简介二、SSH的工作过程三、 SSH远程连接服务配置四、SSH实验SSH(Secure Shell Protocol,安全的壳程序协议: 它可以通过数据包加密技术将等待传输的数据包加密后再传输到网络上。ssh协议本身提供两个服务器功能&#…

爬虫学习-验证码识别

反爬机制:验证码,识别验证码图片中的数据,用于模拟登陆识别验证码的操作人工肉眼识别(不推荐)第三方自动识别(推荐)python第三方库:tesseract、ddddocr(7条消息) 小白都能轻松掌握,python最稳定的图片识别库…