Spark SQL中的RDD与DataFrame转换实例用法
发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,这篇文章主要讲解了"Spark SQL中的RDD与DataFrame转换实例用法",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Spark SQL中的R
千家信息网最后更新 2024年09月22日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安全错误
数据库的锁怎样保障安全
混沌与秩 数据库下载
广东报考软件开发
qq互赞软件开发
战地1怎么取消服务器限制
国外的软件开发商
北京it软件开发常用解决方案
数据库属于设备费吗
凯里黔商互联网络科技
公司服务器数据丢失赔偿谁负责
char是字符串还是字符数据库
阿里巴巴网络服务器在哪里
保存数据库图片大全
医院持卡结算网络安全预案
博瑞北京软件开发有限公司
互联网人工智能软件开发
服务器没有响应
新生代互联网科技温商
合肥2年数据库薪资
招远直播软件开发推荐
网络安全之入侵检测系统
做小程序要不要买服务器
恩施靠谱的软件开发团队
集合石组人是所有服务器吗
小学生网络安全要求
数据库被人删了一条日志
数据库xmp是什么
保存数据库图片大全
方舟生存服务器
谈谈如何维护国家网络安全
淮安市网络安全宣传活动