Spark SQL中的RDD与DataFrame转换实例用法
发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,这篇文章主要讲解了"Spark SQL中的RDD与DataFrame转换实例用法",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Spark SQL中的R
千家信息网最后更新 2025年12月01日Spark SQL中的RDD与DataFrame转换实例用法
这篇文章主要讲解了"Spark SQL中的RDD与DataFrame转换实例用法",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Spark SQL中的RDD与DataFrame转换实例用法"吧!
一.第一种方式RDD转化为DataFrame
1.官网
2.解释
反射把schema信息全部定义在case class 类里面
3.代码
package coreimport org.apache.spark.sql.SparkSessionimport org.apache.spark.sql.types.StructTypeobject Test { def main(args: Array[String]): Unit = { val spark = SparkSession.builder() .appName("Test") .master("local[2]") .getOrCreate() val mess = spark.sparkContext.textFile("file:///D:\\test\\person.txt") import spark.implicits._ val result = mess.map(_.split(",")).map(x => Info(x(0).toInt,x(1),x(2).toInt)).toDF() // result.map(x => x(0)).show() //在1.x 版本是可以的 在2.x不可以需要价格rdd result.rdd.map(x => x(0)).collect().foreach(println) result.rdd.map(x => x.getAs[Int]("id")).collect().foreach(println) }}case class Info(id:Int,name:String,age:Int)4.注意事项
注意2.2版本以前 类的构造方法参数有限在2.2后没有限制了
二.第二种转换方式
1.官网
2.解释
制定scheme信息 就是编程的方式 作用到Row 上面
3.步骤

4.步骤解释
从原有的RDD转化 ,类似于textFile一个StructType匹配Row里面的数据结构(几列),就是几个StructField 通过createDataFrame 把schema与RDD关联上
5.源码解释StructType
6.源码解释
StructField 可以理解为一列StructType 包含 1-n 个StructField
7.最终代码
package coreimport org.apache.spark.sql.types.{IntegerType, StringType, StructField, StructType}import org.apache.spark.sql.{Row, SparkSession}object TestRDD2 { def main(args: Array[String]): Unit = { val spark = SparkSession.builder() .appName("TestRDD2") .master("local[2]") .getOrCreate() val mess = spark.sparkContext.textFile("file:///D:\\test\\person.txt") val result = mess.map(_.split(",")).map(x => Row(x(0).toInt, x(1), x(2).toInt)) //工作中这样写 val structType = new StructType( Array( StructField("id", IntegerType, true), StructField("name", StringType, true), StructField("age", IntegerType, true) ) ) val schema = StructType(structType) val info = spark.createDataFrame(result,schema) info.show() }}8.经典错误
9.原因解决
自己定义的schema信息与Row中的信息不匹配val result = mess.map(_.split(",")).map(x => Row(x(0), x(1), x(2)))//工作中这样写val structType = new StructType( Array( StructField("id", IntegerType, true), StructField("name", StringType, true), StructField("age", IntegerType, true) ))上面的是string 要的是int ,一定要注意因为会经常出错要转化类型val result = mess.map(_.split(",")).map(x => Row(x(0).toInt, x(1), x(2).toInt))三.方法的使用
1.spark-shell 有的方法在代码要自己隐士砖换
df.select('name).show 这个在spark-shell 可以或者df.select('name').show 但是代码里面不行,需要隐士转2.show源码
show源码 默认是true 显示小于等于20条,对应行中的字符是false就全部显示出来show(30,false) 也是全部显示出来不会截断show(5) 但是后面的多与20字符就不会显示你可以show(5,false)
3.select方法源码
4.select 方法调用走的位置
df.select("name").show(false)import spark.implicits._//这样不隐士转换不行df.select('name).show(false)df.select($"name")第一个select走的底层源码是 第一个源码图2,3个select走的源码是第二个5.head源码
head 默认调第一条,你想展示几条就调几条
6.first() 展示第一条 底层调用的是head
7.sort源码
sort源码默认升序降序解释中有
四.sql的操作方法
1.官网临时试图
2.全局试图操作
全局视图加上 global_temp 规定
五.杂项
1.报错
2.原因及代码
val spark = SparkSession.builder() .appName("Test") .master("local[2]") .getOrCreate() val mess = spark.sparkContext.textFile("file:///D:\\test\\person.txt") import spark.implicits._ val result = mess.map(_.split(",")).map(x => Info(x(0).toInt,x(1),x(2).toInt)).toDF() //在1.x 版本是可以的 在2.x不可以需要价格rdd result.map(x => x(0)).show() 这样写是对的 result.rdd.map(x => x(0)).collect().foreach(println) 去类中的数据两种写法: result.rdd.map(x => x(0)).collect().foreach(println)result.rdd.map(x => x.getAs[Int]("id")).collect().foreach(println)3.注意转义字符
对于分隔符 | 你切分一定要加转义字符,否则数据不对
感谢各位的阅读,以上就是"Spark SQL中的RDD与DataFrame转换实例用法"的内容了,经过本文的学习后,相信大家对Spark SQL中的RDD与DataFrame转换实例用法这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
源码
方法
解释
代码
实例
信息
字符
就是
数据
方式
版本
隐士
学习
不行
价格
全局
内容
原因
底层
步骤
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
大橙子服务器给粉鱼盖房子
b/s数据库系统设计实例
app服务器测试
邯郸人工智能软件开发需要多少钱
数据库查询所有不姓
sql 替换部分数据库
计算机网络技术行业发展简史
高中班会网络安全课件
dnf台服数据库越来越大
定州租房网络安全
软件开发级别名称
德惠先进网络技术服务质量保障
启用外置数据库后如何关闭
计算机网络与数据库选谁
互联网科技节主题
阿尔比恩亚洲服务器
绵阳市网络安全综合治理
ABM服务器
腾讯互联网金融网络安全报告
考勤机如何异地导数据库
APP软件开发的市场占有率
数据库迁移很麻烦吗
广州最大的软件开发公司
谢谢网络安全的三个时代
长沙助赢软件开发
软件开发实施组织架构设计
郑州安卓软件开发公司排名
坚持自律软件开发
软件开发者的黄金十年
海口派威软件开发