Spark SQL实验小结(2022.4.10)

article/2025/10/29 5:30:16

Spark SQL实验小结(2022.4.10)

说实话,这作业写的也是真够久的,给我累到了~但是,我不能让我辛辛苦苦学的东西过几天就忘了,所以呢,所以呢,学一下大佬的学习方法,写个博客记录一下(希望真的真的能从今天开始养成习惯,虽然很久以前也是这样说的,绝了,希望记住吧!)


文章目录

    • Spark SQL实验小结(2022.4.10)
  • 一、RDD与DataFrame
  • 二、创建DataFrame对象
    • 1.创建方式
    • 2.结构化数据文件创建DataFrame
    • 3.外部数据库创建DataFrame(Mysql)
    • 4.RDD创建DataFrame方式
    • 5.Hive中的表创建DataFrame
  • END


一、RDD与DataFrame

RDD 是整个 Spark 平台的存储、计算以及任务调度的逻辑基础,更具有通用性,适用于各类数据源,而 DataFrame 是只针对结构化数据源的高层数据抽象,其中在 DataFrame 对象的创建过程中必须指定数据集的结构信息( Schema ),所以 DataFrame 生来便是具有专用性的数据抽象,只能读取具有鲜明结构的数据集。
如下图所示:
在这里插入图片描述
上图直观地体现了 DataFrame 和 RDD 的区别。
左侧的 RDD[Person]虽然以 Person 为类型参数,但 Spark 框架本身不了解 Person 类的内部结构。而右侧的 DataFrame 却提供了详细的结构信息,使得 Spark SQL 可以清楚地知道该数据集中包含哪些列,每列的名称和类型各是什么。
DataFrame 是为数据提供了 Schema 的视图。可以把它当做数据库中的一张表来对待DataFrame 也是懒执行的,但性能上比 RDD 要高,主要原因:优化的执行计划,即查询计划通过 Spark catalyst optimiser 进行优化。
(参考尚硅谷的大数据技术之SparkSql)

二、创建DataFrame对象

1.创建方式

1> 结构化数据文件创建DataFrame
2> 外部数据库创建DataFrame
3> RDD创建DataFrame方式
4> Hive中的表创建DataFrame(由于之前偷懒,没配置好hive环境,所以这个就不详细介绍了,因为自己没有亲自实践,所以写出的东西肯定bug百出,下次弄了的话再补齐吧~)

2.结构化数据文件创建DataFrame

本实验数据样式:
在这里插入图片描述
先上代码:

package SparkSQL
// 导包
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.sql.{DataFrame, Dataset, Row, SQLContext, SparkSession}object dataFrame_test {def main(args: Array[String]): Unit = {// 0.准备环境(常见操作)// SparkSession 可以删除,因为Spark有类型推断性质,后面同理val spark: SparkSession = SparkSession.builder().appName("dataFrame_test").master("local[*]").getOrCreate()val sc : SparkContext = spark.sparkContext// 读取外部文件,函数:spark.read,类型为DataFrame(后面的参数可根据自己的情况进行修改)val people1_DF : DataFrame = spark.read.format("csv").option("header", "false").option("inferSchema", "false").option("delimiter","::").load("E:\\IntelliJ IDEA\\IdeaProjects\\dzh\\SparkSQL_data\\people.dat")// printSchema 函数查看数据模式,打印出列的名称和类型people1_DF.printSchema()// show 函数,查看数据,可以指定查看的行数,默认显示前20行数据people1_DF.show()spark.close()}
}

这一部分没什么好详细阐述的,就是直接套代码就好了(不过spark sql 依赖肯定是要配好的)

3.外部数据库创建DataFrame(Mysql)

这里弄了我好久啊,主要原因是重装了一下Mysql,然后图形界面也没了,最后是在命令行界面弄的,不过感觉大家都是在命令行下操作,不知道是不是我的错觉。
1)mysql 下载好
2)下载 mysql 的依赖包,我下的是

mysql-connector-java-8.0.11

版本,版本要根据自己的mysql版本来下载(我的mysql版本是8.0.11的,所以我下的是上面的版本)。
3)添加依赖(版本根据自己的版本进行修改)

<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.11</version>
</dependency>

如果显示红色,不妨先试一下rebuild(这里我一开始是红色(报错),然后在网上搜了好久,还一直是红色的,然后在那折腾了好久,最后rebuild一下,就好了,不过也可能是前面被我改对了,如果不成的话,再去网上搜一下吧)
4)代码1(印象中,上面弄好了以后,就可以直接读取了,此处默认mysql中以及建立好了相应的数据库和表)

package SparkSQL
// 导包
import java.util.Properties
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.sql.{DataFrame, Dataset, Row, SQLContext, SparkSession}object dataFrame_test {def main(args: Array[String]): Unit = {// 0.准备环境val spark: SparkSession = SparkSession.builder().appName("dataFrame_test").master("local[*]").getOrCreate()val sc : SparkContext = spark.sparkContext// 1.连接 spark SQL 和 mysql/*** jdbc(url: String, table: String, properties: Properties)* 解析: 作用是连接mysql,读取mysql里的表数据,返回DataFrame* url: 连接mysql的路径:    8.0版本:jdbc:mysql://ip:port/dbname?serverTimezone=UTC* 低版本:jdbc:mysql://ip:port/dbname* table: 数据库里的表名* properties: 用于指定连接mysql的用户名,密码等一个Properties对象*/// 此处, test1 是mysql中数据库的名称,people 是mysql中数据表的名称,user 和 password 是需要连接的mysql的用户和密码val url = "jdbc:mysql://localhost:3306/test1"val table = "people"val prop = new Properties()prop.setProperty("user", "root")prop.put("password", "123456")val people2_DF: DataFrame = spark.read.jdbc(url, table, prop)people2_DF.printSchema()people2_DF.show(5)people2_DF.head(3)people2_DF.collect()spark.close()}
}

5)代码2(第二种方式)

package SparkSQL
// 导包
import java.util.Properties
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.sql.{DataFrame, Dataset, Row, SQLContext, SparkSession}object dataFrame_test {def main(args: Array[String]): Unit = {// 0.准备环境val spark: SparkSession = SparkSession.builder().appName("dataFrame_test").master("local[*]").getOrCreate()val sc : SparkContext = spark.sparkContextval people2_DF: DataFrame = read(spark)people2_DF.printSchema()people2_DF.show(5)people2_DF.head(3)people2_DF.collect()spark.close()}// 也可以使用下面的方式读取数据def read(spark: SparkSession): DataFrame = {val jdbcDF = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/test1").option("dbtable", "people").option("user", "root").option("password", "123456").option("driver", "oracle.jdbc.driver.OracleDriver").load()jdbcDF}
}

4.RDD创建DataFrame方式

1)关键点:先定义一个 case class,然后借助这个将RDD转换成DataFrame (定义方式有多种,这里只展示一种)
2)代码

package SparkSQL
// 导包
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.types.{IntegerType, StringType, StructField, StructType}
import org.apache.spark.sql.{DataFrame, Dataset, Row, SparkSession}
// 定义一个 case class
case class Person(name:String, sex:String, age:Int, x1:String, x2:String)object dataFrame_test {def main(args: Array[String]): Unit = {//创建上下文环境配置对象val sparkConf = new SparkConf().setMaster("local[*]").setAppName("sparkSql")//创建 SparkSession 对象val spark = SparkSession.builder().config(sparkConf).getOrCreate()//获取sparkContext对象val sc: SparkContext = spark.sparkContext// 读取文件数据// RDDval data = sc.textFile("E:\\IntelliJ IDEA\\IdeaProjects\\dzh\\SparkSQL_data\\people.dat").map(x=>x.split("::"))//定义一个样例类//将rdd与样例类进行关联val peopleRDD = data.map(x=>Person(x(0), x(1), x(2).toInt, x(3), x(4)))//将RDD手动转换成dataframe//需要手动导入隐式转换,“mySpark”需要与上面构建的sparkSession对象保持一致import spark.implicits._//    val moviesDF: DataFrame = moviesRDD.toDF()val people3_DF = peopleRDD.toDF()people3_DF.printSchema()people3_DF.show(5)people3_DF.head(3)people3_DF.collect()spark.stop()}
}

5.Hive中的表创建DataFrame

下次实践过再补齐~


END


http://chatgpt.dhexx.cn/article/LKtYrKFR.shtml

相关文章

嵌入式综合实验小结

一&#xff1a;实验目的 利用CC2530 的GPIO读取按键值并相应对进行LED发光二极管的亮灭操作&#xff1b;利用CC2530的串口0进行数据收发通讯。 二&#xff1a;实验环境 1.硬件&#xff1a;通用节点、USB仿真器、USB电缆、PC机&#xff1b; 2.软件&#xff1a;IAR Embedded Wor…

Windows 实验总结

关于DLL的生成地址 在CreateDLL.cpp文件中&#xff0c;我定义了两个函数&#xff0c;同时这里 __stdcall&#xff1a;Windows API默认的函数调用协议。 在头文件做好相对应的定义&#xff1a; __declspec(dllexport) 将一个函数声名为导出函数&#xff0c;就是说这个函数要…

java实验总结_java第一次实验总结第三周总结

Java第一次实验报告&#xff0c;java开发环境与简单的Java程序 一.实验目的 1.熟悉JDK开发环境 2.熟练掌握结构化程序设计方法 二.实验内容 打印输出所有的“水仙花数”&#xff0c;所谓“水仙花数”是指一个3位数&#xff0c;其中各位数字立方和等于该数本身。例如&#xff0c…

关于计算机网络安全实验报告总结,信息安全实验总结报告

信息安全实验总结报告 篇一:信息安全实验报告 课程名称: 信息安全 实验名称: 共五次实验 班级: 姓名: 同组人: 指导教师评定: 签名: 实验一 木马攻击与防范 一、实验目的 通过对木马的练习,使读者理解和掌握木马传播和运行的机制;通过手动删除木马,掌握检查木马和删…

Android Studio实验小结

hello&#xff0c;刚上手AS的小白总是会遇到各种问题。现在写个博客&#xff0c;记录一下这次实验遇到的问题 1、AS运行时总是Wating for Target Device to Come Online 状况&#xff1a;明明看见进度条已经到头了&#xff0c;app却仍然不能launch 解决方法&#xff1a;最直…

springboot-安全认证security+jwt总结

目录 一、背景 二、基本jar依赖引入 三、security模块 1、编写配置类 2、UnauthorizedHandler代码 3、security验证用户名和密码的部分 四、jwt模块 1、jwt原理部分 2、jwt一共需要四个类 五、总结 一、背景 要做一个后台管理系统&#xff0c;会引入多个系统&#x…

璀璨盛启·焕美升级 上颜集团杭州医学旗舰中心盛大启幕

2023年4月26日&#xff0c;「璀璨盛启焕美升级」上颜杭州医学旗舰中心启幕盛典在杭州滨江钱龙大厦耀新启幕。上颜用审美、匠心构建城市的活力与色彩&#xff0c;致力于为客户带来全新的美丽方式和一流的品质服务。 &#xff08;上台剪彩嘉宾从左至右依次为&#xff09;上颜集团…

尚品汇项目难点及解决

v-router重写push、replace方法 问题描述&#xff1a;当页面再次进入同一个路由地址时&#xff0c;控制台报错 解决方法&#xff1a;修改vue-router的配置文件&#xff0c;也就是router/index.js文件 //重写VueRouter.prototype身上的push方法了 VueRouter.prototype.push …

技术·融合·治理|众享链网2021发布会暨试运行启动仪式成功举办

2021年6月&#xff0c;工业和信息化部、中央网信办共同发布《关于加快推动区块链技术应用和产业发展的指导意见》&#xff0c;建设多方协同共赢的先进产业链&#xff0c;打造多技术融合的区块链生态体系已成为新的发展方向。如何能让所有人都有机会参与这场区块链的产业变革&am…

尚品汇前端项目难点

尚品汇前端项目 1.如何运行后浏览器自动打开 ​ 解决方法&#xff1a;找到package.json 找到 script serve 后面加 –open 2.打开后发现第一次打开网页显示http://0.0.0.0:8080/ 的网页可能暂时无法连接&#xff0c;或者它已永久性地移动到了新网址。 解决方法&#xff1a;…

九龙证券|券商春季策略扎堆来袭 风格切换成焦点

2月以来&#xff0c;国泰君安、中信建投、国金证券等10余家券商组织相继发布2023年春季战略。综合来看&#xff0c;组织对A股持达观预期&#xff0c;未来两三个月A股商场或迎来重要切换。风格上&#xff0c;“中心财物&#xff0c;生长接力”或许成为上半年装备主线&#xff0c…

分击合进,锦江之星酒店与白玉兰酒店再领投资热潮

2022年11月11日&#xff0c;「山水画中游&#xff0c;暇享好时光」品牌品鉴会在广西桂林隆重召开。锦江酒店&#xff08;中国区&#xff09;旗下两大酒店品牌锦江之星酒店和白玉兰酒店携手亮相本次活动。 &#xff08;品牌矩阵品鉴会活动现场&#xff09; 后疫情时代&#xff…

盛世昊通打造好品艺拍线上交易平台,助力推广中国艺术文化

艺术品交易市场这两年的发展可谓是空前热烈&#xff0c;诸多艺术品皆迎来变现需求。新时代背景下&#xff0c;有数字技术的加持&#xff0c;数字文化资产作为数字经济发展的重要组成部分&#xff0c;成就了文化交易市场蓝海。 为响应国务院“全面复兴传统文化”&#xff0c;“提…

上海亚商投顾:沪指高开低走涨0.45% 大消费王者归来

上海亚商投顾前言&#xff1a;无惧大盘大跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪 沪指今日高开低走&#xff0c;深成指、创业板指较为强势&#xff0c;盘中均涨超2%&#xff0c;午后涨幅有所收窄。…

《扬帆优配》互联互通扩容提升港股市场活力

作为国际最敞开的自由港和重要的国际金融中心之一&#xff0c;香港衔接内地与国际的优势不断稳固。自2022年以来&#xff0c;互联互通机制屡获打破性进展&#xff0c;港交所发挥“超级联系人”的效果不断提高。 今年3月&#xff0c;跟着港股通进一步扩容&#xff0c;一批成长型…

活动回顾丨研发效能度量线下沙龙圆满举办

2月18日&#xff0c;由跬智信息&#xff08;Kyligence&#xff09;联合甄知科技主办的研发效能度量线下沙龙圆满举办。本次沙龙在 Kyligence 上海总部举办&#xff0c;Kyligence 联合创始人兼 CTO 李扬、腾讯 Tech Lead 茹炳晟&#xff0c;以及甄知科技创始人兼 CTO 张礼军在现…

2023COSP深圳户外展行业高峰论坛即将召开!博洋优选也将参加

2023COSP深圳户外展将在3月17日—19日&#xff0c;于深圳福田会展中心举办&#xff0c;此次展会邀请到知名品牌企业领头人、商协会负责人、圈内大咖&#xff1b;由市场趋势的洞察入手&#xff0c;多维度、多角度进行深度分享&#xff0c;引导行业从业者&#xff0c;以更宏观、更…

精彩回顾 | 客户体验官俱乐部(CEOC)首届主题论坛在深圳圆满落幕

2021年10月29日&#xff0c;客户体验官俱乐部&#xff08;Customer Experience Officer Club&#xff0c;CEOC&#xff09;首届主题论坛在深圳益田威斯汀酒店圆满落幕。本次论坛由客户体验官俱乐部主办&#xff0c;瀚一数据科技&#xff08;深圳&#xff09;有限公司和才博&…

尚好房 04_服务拆分

尚好房&#xff1a;服务拆分 一、业务介绍 1、项目模块划分 根据前面的介绍&#xff0c;目前我们的系统规划了3个dubbo服务提供者模块&#xff1a;权限服务、房源服务与会员服务&#xff0c;及2个服务消费者模块&#xff1a;尚好房管理平台&#xff08;web-admin&#xff09…

纯正体验,极致商务 | 丽亭酒店聚焦未来赛道,实现共赢发展

10月28日&#xff0c;锦江酒店(中国区)“齐鲁集锦 共话未来”投资人交流会在济南盛大召开&#xff0c;面向华东地区投资人&#xff0c;行业专家、商旅客、品牌代表齐聚一堂&#xff0c;共同聚焦酒店市场投资新价值&#xff0c;商讨新时代酒店行业新机遇&#xff0c;多维探索酒店…